2017-10-12 1 views
0

Ich habe versucht, entfernen Sie Elemente aus einer Liste und dann gleich einer anderen Variablen, während immer noch die ursprüngliche Liste.Wie wird eine Variable einer Liste mit entfernten Elementen gleichgesetzt, ohne die ursprüngliche Liste zu ändern?

Code:

print (len(desc1)) 
desc2 = [] 
for tuple in desc1: 
    for line in tuple: 
     if line.endswith(':'): 
      desc2 = desc1.remove(tuple) 
print (len(desc1)) 
print (desc2) 

Ausgang:

550 
200 
None 

Was ich der Ausgang sein möchte:

550 
550 
200 

Was muss ich diese verwenden müssen zu erreichen?

+0

'desc2 = [Tupel für Tupel in desc1 wenn nicht (line.endswith (":") für Zeile in Tupel)]' – zondo

Antwort

1

Kopieren Sie die Liste zuerst.

desc2 = desc1[:] # shallow copy 
for tuple in desc2: 
    for line in tuple: 
     if line.endswith(":"): 
      desc2.remove(tuple) # don't assign here 

Beachten Sie, dass diese Art der eine schlechte Idee ist jedenfalls, da Sie die Liste sind mutiert (Entfernen von Mitgliedern), wie Sie darüber sind laufen. Außerdem verwenden Sie hunderte Male list.remove und es ist nicht gerade schnell. Verwenden Sie stattdessen ein Listenverständnis.

desc2 = [tup for tup in desc1 if not any(line.endswith(":") for line in tup)] 
# or 
desc2 = filter(lambda t: not any(line.endswith(":") for line in t), desc1) 
+1

Ändern 'für Tupel in desc2' zu' für Tupel in desc1' würde Entfernen Sie die negativen Auswirkungen der Mutation der Liste, die Sie durchlaufen (obwohl es natürlich immer noch ineffizient ist.) – zondo

Verwandte Themen