0

あるリストから別のリストにアイテムを転送しようとしていますが (以下のように)、結果は本当に不可解です。ここで何が起こっているのか誰にも分かりませんか??

l1=range(1,11)
l2=[]
for i in l1:
    if i>=6:
        l2.append(i)
        l1.remove(i)
print l1
print l2

l1 = [1-5, 7, 9] # and
l2 = [6, 8, 10]  # !!
4

2 に答える 2

3

問題は、反復しているリストを変更しているという事実によるものです。

SOで検索すると、これに関する多くの投稿が見つかります。例:繰り返しながらリストを変更するPython:リストを繰り返しながらリスト要素を削除するなど

于 2012-07-21T17:50:37.480 に答える
3

反復しているリストを変更しないでください。変更すると、奇妙な結果が得られます。座っている枝を切るようなものです。に基づいて2つのリストを作成するのはどうl1ですか?

big = [x for x in l1 if x >= 6]
small = [x for x in l1 if x < 6]

さらに良いことに、パフォーマンスを重視する場合:

big = []
small = []

for item in l1:
    if item >= 6:
        big.append(item)
    else:
        small.append(item)
于 2012-07-21T17:51:15.443 に答える