如何从for循环中获取多个值?

1 投票
4 回答
3991 浏览
提问于 2025-04-16 14:26

我有一列记录,叫做日期列表。这个列表里面有很多重复的日期,比如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 的回答。

撰写回答