Python列表处理问题

2024-03-29 10:18:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要用list“input\u array”的元素更新list“array”的第一个元素。 问题: 如果列表“array”是由type2创建的,那么它可以正常工作(每次迭代都会替换元素)。 如果数组是由Type1创建的,那么所有元素在每次迭代中都会更新。你知道吗

#TYPE1
#----------
array=[]
array_elem=['0.0']
for i in range(3):
    array.append(array_elem)
print array

#TYPE2
#-------
array=[['0.0'],['0.0'],['0.0']]
print array


input_array=['35.0', '20.0', '15.0']
array_position=0
for elem in range(len(input_array)):
    array[elem][array_position]=str(input_array[elem])
    print "result",array

output with Type1:
[['0.0'], ['0.0'], ['0.0']]
[['0.0'], ['0.0'], ['0.0']]
result [['35.0'], ['35.0'], ['35.0']]
result [['20.0'], ['20.0'], ['20.0']]
result [['15.0'], ['15.0'], ['15.0']]


output with Type2:
[['0.0'], ['0.0'], ['0.0']]
[['0.0'], ['0.0'], ['0.0']]
result [['35.0'], ['0.0'], ['0.0']]
result [['35.0'], ['20.0'], ['0.0']]
result [['35.0'], ['20.0'], ['15.0']]

我需要第二类的结果。。但是主数组将像Type1中那样动态创建。 两种创建列表的方法有什么区别?你知道吗

提前谢谢


Tags: in元素列表forinputoutputpositionrange
3条回答

type1示例创建对数组元素的引用。因此,当数组元素从一个引用更改时,所有引用都会更改。type1场景的简化版本如下:

x = [0.0]
y = x      # x and y now reference the same object
x[0] = 1.0
print(y)

> [1.0]

但是type2示例有单独的数组元素副本:

x = [0.0]
y = [0.0]  # x and y reference different objects
x[0] = 1.0
print(y)

> [0.0]

您可以考虑对代码使用列表理解。下面两个示例创建数组元素的副本,它与您想要的type2示例相匹配。你知道吗

array = [[0.0] for _ in range(3)]

或:

array = [list(array_elem) for _ in range(3)]

您的type1示例与下面的速记相同。此代码将创建对数组元素的引用:

array = [array_elem] * 3

此代码:

array=[]
array_elem=['0.0']
for i in range(3):
    array.append(array_elem)

相同的列表放入array三次。要放置列表的副本,请使用切片:

array=[]
array_elem=['0.0']
for i in range(3):
    array.append(array_elem[:])  # <--- [:] makes a copy of the full list

当你说:

array.append(array_elem)

你在复制中的相同引用。你知道吗

如果你改写了

array.append(['0']) 

问题就会消失。如果您需要使用一个变量来初始化数组,那么请使用它的一个副本,即。数组.append(复制。复制(数组元素)。见副本库文件。你知道吗

相关问题 更多 >