очистить мой список - PullRequest
0 голосов
/ 26 мая 2011

Здравствуйте, у меня есть цикл, который подсчитывает различные записи в моей базе данных 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 ]

7 голосов
/ 26 мая 2011

Просто поместите его в 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.

0 голосов
/ 26 мая 2011

Вы можете столкнуться с такой проблемой, как:

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

, который дает вывод:

Elem  1
Elem  2
Elem  4

Список изменяется в цикле, и при удалении некоторого элемента, через который вы уже прошли, вы пропускаете один элемент в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...