Python将列表中的项附加到另一个列表,并弹出原始列表中的最后一个元素

时间:2016-11-06 17:01:39

标签: python list append pop

我有两个列表,我想从一个列表中取出每个元素将它附加到另一个列表并将结果保存在另一个列表中。这是我的代码,但是当我追加项目并将结果分配给另一个列表时,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']]]

4 个答案:

答案 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)

Results of running that code

答案 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())