my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list:
if k > 6:
#delete k
k
特定の値より大きい場合、リストから削除するにはどうすればよいですか?
繰り返し処理しているリストを変更するべきではありません。新しいリストを作成して変数に代入してください:
my_list = [k for k in my_list if k <= 6]
から要素を削除するにlist
は、 メソッドを使用できますremove
。list
ただし、反復処理中に要素を削除すると、未定義の動作になることを考慮する必要があります。例えば:
>>> L = [1,2,3,4,5]
>>> for x in L:
... L.remove(x)
...
>>> L #should be empty
[2, 4]
これを回避したい場合はlist
、リスト内包表記を使用して新しいものを作成するか、単にリストのコピーを反復処理することができます。
>>> L = range(10)
>>> [x for x in L if x <= 6]
[0, 1, 2, 3, 4, 5, 6]
>>> for x in L[:]:
... if x > 6:
... L.remove(x)
...
>>> L
[0, 1, 2, 3, 4, 5, 6]
指定した値より大きいリスト内のすべての要素を削除する場合。並べ替えとスライスを使用できます。
並べ替え、削除、または何とかせずに set を使用することをお勧めします... :P
a = [3,1,2,4,5,6,8,9,0,7]
次に並べ替え
a = a.sort() #a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
idx = a.index(6) #idx=6
次にスライス
a = a[0:idx] # a = [0, 1, 2, 3, 4, 5]
または、代わりに を使用していset
ます。指定した制限を使用して別のリストを作成しrange
ます。たとえば、すべての要素を削除し4 to 8
ます
rm = xrange(4,8+1)
a = list(set(a) - set(rm)) # a = [0, 1, 2, 3, 9]
リスト内包表記を使用できます。
k = [i for i in k if i <= 6]
またはfilter
(Python 3ではfilter
、リストに変換できるオブジェクトが返されることに注意してください)
k = filter(lambda x: x <= 6, k)
上記の 2 つのオプションは同じことを行います。
これを試して、
>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>>
最後までループを開始しますが、インデックスは移動しません:
my_list = [0,1,2,3,4,5,6,7,8,9,10]
for k in my_list[::-1]:
if k > 6:
del k