-1
my_list = [0,1,2,3,4,5,6,7,8,9,10]

for k in my_list:

    if k > 6:
        #delete k

k特定の値より大きい場合、リストから削除するにはどうすればよいですか?

4

6 に答える 6

3

繰り返し処理しているリストを変更するべきではありません。新しいリストを作成して変数に代入してください:

my_list = [k for k in my_list if k <= 6]
于 2013-02-06T06:48:44.840 に答える
1

から要素を削除するにlistは、 メソッドを使用できますremovelistただし、反復処理中に要素を削除すると、未定義の動作になることを考慮する必要があります。例えば:

>>> 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]
于 2013-02-06T06:50:28.277 に答える
0

指定した値より大きいリスト内のすべての要素を削除する場合。並べ替えとスライスを使用できます。

並べ替え、削除、または何とかせずに 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]
于 2013-02-06T10:00:33.850 に答える
0

リスト内包表記を使用できます。

k = [i for i in k if i <= 6]

またはfilter(Python 3ではfilter、リストに変換できるオブジェクトが返されることに注意してください)

k = filter(lambda x: x <= 6, k)

上記の 2 つのオプションは同じことを行います。

于 2013-02-06T06:48:16.183 に答える
0

これを試して、

>>> my_list= [i for i in my_list if i <= 6]
>>> print my_list
[0, 1, 2, 3, 4, 5, 6]
>>> 
于 2013-02-06T06:48:49.870 に答える
0

最後までループを開始しますが、インデックスは移動しません:

my_list = [0,1,2,3,4,5,6,7,8,9,10]

for k in my_list[::-1]:

    if k > 6:
        del k
于 2013-02-06T06:51:05.617 に答える