0

こんにちは、MySQLデータベース内のさまざまなレコードをカウントし、その数をリストに保存するループがあります。リストは次のとおりです。
[1L, 2L, 2L, 5L, 4L, 1L, 1L, 1L, 3L, 1L, 1L, 2L, 2L, 3L, 3L, 1L, 2L, 4L, 2L, 1L, 3L, 1L, 2L, 4L, 1L, 2L, 1L, 1L, 3L, 1L, 3L, 1L, 5L, 2L, 1L, 1L, 5L, 1L, 1L, 1L, 4L, 2L, 1L, 3L, 2L, 1L, 2L, 2L, 2L, 3L, 1L, 1L, 3L, 2L, 2L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 1L, 3L, 3L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L]

今、私はこのリストを通り抜け、単一の数字(1L、2Lなどを意味する)だけを残したいのですが、このループを使用しています:

for number in legend:
        print number # to check what number it does currently
        counter = legend.count(number)
        while counter > 1:
            legend.remove(number)
            counter -= 1 

次に、1、2、3、4、3、2、1をチェックしていることがわかります...それはなぜですか?なぜこのループは5番をチェックしないのですか?最後に、リストは次のようになります。
[5L, 5L, 5L, 4L, 3L, 2L, 1L]

それはそれが機能することを意味しますが、なぜそれは5番に行かないのですか?

事前にt​​hx

4

2 に答える 2

7

に入れるだけsetです。

>>> foo = [1,1,1,2,2,3,3,4,1,4,3,6,5,6]
>>> set(foo)
set([1, 2, 3, 4, 5, 6])

これにより、すべての重複が自動的に除外されます。setたぶん、あなたはリストをスキップして、そもそもそれを置くことができます。

于 2011-05-26T09:47:30.873 に答える
0

次のような問題が発生する可能性があります。

list = [1,2,3,4]
for l in list:
    print "Elem ", l
    if l == 2:
        list.remove(1)

これは出力を与えます:

Elem  1
Elem  2
Elem  4

リストはループで変更され、すでにループしている要素を削除している間、リスト内の1つの要素をスキップしています。

于 2011-05-26T09:57:15.820 に答える