在python中一次迭代列表的两个值[重复]

Posted

技术标签:

【中文标题】在python中一次迭代列表的两个值[重复]【英文标题】:iterating over two values of a list at a time in python [duplicate] 【发布时间】:2013-05-23 06:57:45 【问题描述】:

我有一个像 (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08) 这样的集合,我需要对其进行迭代,比如

    for x,y in (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08)
        print (x,y)

会打印出来

    669256.02 6117662.09
    669258.61 6117664.39
    669258.05 6117665.08

我在 Python 3.3 顺便说一句

【问题讨论】:

还有Python "Every Other Element" Idiom 你说得对,它是重复的。太尴尬了...但是谢谢! 不同意欺骗:每两个子案例都有一个不错的简单iter() Ashwini 给出的解决方案。 【参考方案1】:

您可以使用迭代器:

>>> lis = (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08)
>>> it = iter(lis)
>>> for x in it:
...     print (x, next(it))
...     
669256.02 6117662.09
669258.61 6117664.39
669258.05 6117665.08

【讨论】:

如果您的列表包含奇数个项目,这将引发 StopIteration 异常。【参考方案2】:
>>> nums = (669256.02, 6117662.09, 669258.61, 6117664.39, 669258.05, 6117665.08)
>>> for x, y in zip(*[iter(nums)]*2):
        print(x, y)


669256.02 6117662.09
669258.61 6117664.39
669258.05 6117665.08

【讨论】:

哇。这几乎不可读,认为它是一个黑客。 -1 为此。不过,为简洁起见 +1。 @Alfe 阅读官方 Python 文档:docs.python.org/2/library/functions.html#zip ...尤其是说 “这使得将数据系列聚类为使用 zip(*[iter(s)]*n) 的 n 长度组。" 在阅读了这样的文档后,我会对文档进行同样的说明。只要假设黑客足够可行,它就被称为成语。但这并不能使它可读;-) @Alfe 好吧,我同意你的观点,python 文档显然是错误的,我们不应该听它 显然永远不会只有一种看待它的方式。【参考方案3】:

itertools 食谱部分中的 grouper 示例应该可以帮助您: http://docs.python.org/library/itertools.html#itertools-recipes

from itertools import zip_longest
def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

你会这样使用它:

for x, y in grouper(my_set, 2, 0.0):  # Use 0.0 to pad with a float
    print(x, y)

【讨论】:

以上是关于在python中一次迭代列表的两个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python 迭代器和生成器

根据其他字段的计算,在 pandas 数据框中一次创建两个新字段

python基础-迭代器

python之迭代器

如何在Python中一次运行多个while循环[重复]

迭代算法