Что Python эквивалентен из шаблона Perl, чтобы отследить, если что-то было уже замечено?

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

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

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

5
задан Sinan Ünür 3 February 2010 в 02:22
поделиться

3 ответа

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
11
ответ дан 18 December 2019 в 14:46
поделиться
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
1
ответ дан 18 December 2019 в 14:46
поделиться

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

for x in set(foo):
    do something
1
ответ дан 18 December 2019 в 14:46
поделиться