![](/img/trans.png)
[英]Python: how make class, inherited from list, with access to first element?
[英]How to make the first element of the list unchange in python?
这是我的清单,
a = [['a','b','c','d'],['e','f','g','h'],['i','j','k','l'],['m','n','o','p']]
这是我的功能,
def add(change,unchange):
a = change
b = unchange
a[0].insert(a[0].index(a[0][2]),"high_range")
a[0].insert(a[0].index(a[0][3]),"low_range")
print(a)
print(b)
当我尝试执行此功能时,
add(a,a[0])
我得到这个输出,
[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'high_range', 'low_range', 'c', 'd']
但我的预期输出如下,
[['a', 'b', 'high_range', 'low_range', 'c', 'd'], ['e', 'f', 'g', 'h'], ['i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p']]
['a', 'b', 'c', 'd']
如何使列表的第一个元素在第二个变量中保持不变? 对不起,我是新手。
由于列表是可变类型,因此当您将值插入a
这也会反映在b
,因为它们是指向同一列表的指针。 您可以在将值插入列表之前打印b
,或者像这样制作b
一个unchange
的副本:
def add(change,unchange):
a = change
b = unchange[:]
a[0].insert(2, "high_range")
a[0].insert(3, "low_range")
print(a)
print(b)
此外, a[0].index(a[0][2])
是多余的,你已经知道索引是 2。
主要问题在于:
add(a, a[0])
因为你是变异a
函数里面a[0]
会发生变化,以及它们指向同一个东西。 您需要相应地设计您的程序。 你可以参考这个答案。 如何克隆或复制列表?
根据您的要求,您可以执行此操作。
add(a, a[0][:])
# 或
您的功能很完美,但请执行以下操作:
add(a,a[0][:])
这将使第二个变量,即a[0]
成为一个副本,它将保持不变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.