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?

提前谢谢

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

列表在循环中被修改,并且在删除您已经循环通过的某些元素时,您正在跳过列表中的一个元素。

于 2011-05-26T09:57:15.820 回答