在Perl中,可以执行以下操作
for (@foo) {
# do something
next if $seen{$_}++;
}
我希望能够在Python中执行等效操作,即如果已执行一次则跳过块。
答案 0 :(得分:11)
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 :(得分:1)
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
答案 2 :(得分:1)
如果你不关心foo中事物的顺序,并且只关注迭代的唯一项,那么解决方案很多更简单。
for x in set(foo):
do something