В Perl можно сделать следующее
for (@foo) {
# do something
next if $seen{$_}++;
}
Я хотел бы смочь сделать эквивалент в Python, который должен пропустить блок, если он был выполнен однажды.
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
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
Если вас не заботит порядок вещей в foo, а только то, что уникальные элементы повторяются, то решение намного проще.
for x in set(foo):
do something