如何从for循环中获取多个值?
我有一列记录,叫做日期列表。这个列表里面有很多重复的日期,比如1/1/2010、1/1/2010……但也有不同的日期。
但是如果我用:
for date in dates: ....
它会对每一个日期都重复执行一遍循环(不管这些日期是否相同),而不是只对不同的日期执行。那我该怎么告诉它只处理不同的日期呢:
for differentdate in dates:...
这个语言是Python!!
4 个回答
0
如果保持顺序 很重要,那么下面这个生成器函数是根据Alex Martelli的一个评论而来的,关于如何从一个序列中去除重复项的ActiveState食谱。这个方法应该也会比较快,因为有一些基准测试显示了它的性能,包含了原来的基于字典的、非生成器的Martelli示例:
dates = ["1/1/2010", "1/3/2010", "1/3/2010", "1/7/2010"]
def unique(seq, idfun=lambda x: x):
seen = set()
for item in seq:
marker = idfun(item)
if marker not in seen:
seen.add(marker)
yield item
for date in unique(dates):
print date
# 1/1/2010
# 1/3/2010
# 1/7/2010
另一个不错的特点是,它相当灵活,可以通过提供一个自定义的 idfun
来适应其他数据结构,这样就可以用来获取要比较的数据。
5
你可以使用 itertools 这个模块来按日期分组。例如:
>>> import itertools
>>> a = ["aaa", "bbb", "bbb", "ccc"]
>>> for k, g in itertools.groupby(a):
... print(k)
...
aaa
bbb
ccc
这样做可以保持 a
中元素的原始顺序(这对你来说可能很重要)。在这个循环里,g
是一个生成器,它会产生一个包含每个与这个键相关的元素的序列。想了解更多信息,可以查看 itertools.groupby
的文档。
5
for date in set(dates):
set()
是一个可以把其他集合中独特的元素放在一起的工具。需要注意的是,这个方法可能不会保持原来列表的顺序,所以如果你需要保持那个顺序,可以参考 @GregHewgill 的回答。