2016-11-06 4 views
0

Ich habe zwei Listen, ich möchte jedes Element aus einer Liste nehmen Sie an eine andere Liste anhängen und speichern Sie das Ergebnis in noch einer anderen Liste. Dies ist mein Code, aber wenn ich das Element anfüge und das Ergebnis einer anderen Liste zuordne, entfernt der Pop das angefügte Element sowohl aus der ursprünglichen Liste als auch aus der Ergebnisliste.Python anfügen ein Element in einer Liste zu einer anderen Liste und Pop das letzte Element in der ursprünglichen

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 

Mein Endziel die Ergebnisliste so zu haben ist:

result=[[['Shirt','Red','XS'],['Shirt','Red','S'],['Shirt','Blue','XS'],['Shirt','Blue','S']]] 

Antwort

2

Wenn ich mich gut erinnere, ist das Problem der Pass durch Verweis war, haben Sie eine Kopie der Liste anzuhängen.

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

Sie benötigen einen Kopie der Liste zu machen, wenn Sie es zu dem Ergebnis hinzufügen, sonst vorgenommenen Änderungen an einem als auch in der anderen auftreten.

result.append(list(item)) 

In diesem Fall ist der einzige Grund, warum Sie pop ist die Änderung rückgängig zu machen Sie gerade getan haben, so ist es besser, es zu tun, nur um die Kopie statt.

copy = item[:] 
copy.append(size) 
result.append(copy) 
+0

Gibt es eine andere bessere Möglichkeit, dieses Problem zu nähern? Wie Sie sagten, muss ich die Änderung jedes Mal rückgängig machen, und ich habe tatsächlich 3 Listen, die den gleichen Algorithmus für jedes Einzelteil benötigen. –

+0

@payam Entschuldigung, mein Beispiel war unvollständig. –

1
pi = [['Shirt','Red'],['Shirt','Blue']] 
sizes = ['XS','S'] 
result = [] 
for i in pi: 
    for j in sizes: 
    result.append(i+[j]) 

print result 

Dies sollte es tun

1

dies referance Problem, kopieren Verwendung()

result.append(item.copy()) 
+0

Ich habe versucht, dies für 3 Stunden zu lösen! Es war eine große Hilfe! Vielen Dank! –

Verwandte Themen