2017-10-12 6 views
0

リストからアイテムを削除して元のリストを保持したまま、別の変数と同じアイテムにすることを試みました。元のリストを変更せずに、項目を削除したリストと変数を等しくするにはどうすればよいですか?

コード:

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

出力:Iが出力になりたい何

550 
200 
None 

550 
550 
200 

私はこれを達成するために使用しなければならないのか?

+0

'desc2 = [desc1におけるタプルのためのタプルでない場合、任意の(line.endswith( ":" タプルの行のための))] desc1'にタプルに対して'にdesc2'にタプルに対して ''変更 – zondo

答えて

1

リストを最初にコピーします。

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

これは、あなたが反復処理している間にリストを変更している(メンバーを削除している)ので、これはちょっとしたことです。さらに、list.removeを何百回も使用していますが、それは正確ではありません。代わりに、リストの理解を使用することを検討してください。

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

希望反復処理中のリストを変更することによる悪影響を排除します(ただし、それでもまだ効率が悪いです)。 – zondo

関連する問題