我有两个列表,我想从一个列表中取出每个元素将它附加到另一个列表并将结果保存在另一个列表中。这是我的代码,但是当我追加项目并将结果分配给另一个列表时,pop会从原始列表和结果列表中删除附加项目。
pi = [['Shirt','Red'],['Shirt','Blue']]
sizes = ['XS','S']
result = []
for item in pi:
for size in sizes:
item.append(size)
result.append(item)
item.pop(-1) #Once this line is run the size is removed from both result and item
我的最终目标是让结果列表如下:
result=[[['Shirt','Red','XS'],['Shirt','Red','S'],['Shirt','Blue','XS'],['Shirt','Blue','S']]]
答案 0 :(得分:2)
如果我记得很清楚,问题是通过引用传递,你必须附上一份清单。
pi = [['Shirt','Red'],['Shirt','Blue']]
sizes = ['XS','S']
result = []
for item in pi:
for size in sizes:
item.append(size)
result.append(item[:])
item.pop(-1)
print(result)
答案 1 :(得分:1)
当您将结果添加到结果中时,您需要对列表进行复制,否则对其中一个进行的修改也将在另一个中进行。
result.append(list(item))
在这种情况下,pop
唯一的原因就是撤消刚刚进行的修改,因此最好将其复制到副本中。
copy = item[:]
copy.append(size)
result.append(copy)
答案 2 :(得分:1)
pi = [['Shirt','Red'],['Shirt','Blue']]
sizes = ['XS','S']
result = []
for i in pi:
for j in sizes:
result.append(i+[j])
print result
这应该这样做
答案 3 :(得分:1)
这是referance问题,请使用copy()
result.append(item.copy())