清理我的清单

时间:2011-05-26 09:46:05

标签: python loops nested-lists

您好我有一个循环,它会计算我的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号?

事先提前

2 个答案:

答案 0 :(得分: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中。

答案 1 :(得分: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

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