Что такое Python-эквивалент шаблона Perl для отслеживания, если что-то уже было замечено? - PullRequest
5 голосов
/ 03 февраля 2010

В Perl можно сделать следующее

for (@foo) {
    # do something 
    next if $seen{$_}++;
}

Я хотел бы иметь возможность сделать эквивалент в Python, то есть пропустить блок, если он был выполнен один раз.

Ответы [ 3 ]

11 голосов
/ 03 февраля 2010
seen = set()
for x in foo:
    if x in seen:
        continue
    seen.add(x)
    # do something

Дополнительную информацию см. В документации set.

Кроме того, примеры внизу документации модуля itertools содержат unique_everseen генератор, который вы можете использовать так:

for x in unique_everseen(foo):
    # do something
1 голос
/ 03 февраля 2010

Если вас не волнует порядок вещей в foo, и только то, что уникальные элементы перебираются, тогда решение будет намного проще.

for x in set(foo):
    do something
1 голос
/ 03 февраля 2010
seen={}
for item in foo:
   if seen.has_key(item):
      seen[item]+=1
      continue # continue is optional, just to illustrate the "next" in Perl
   else:
      seen[item]=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...