在python中一次迭代列表的两个值

Ras*_*sen 47 python list

我有一套像(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)
Run Code Online (Sandbox Code Playgroud)

哪个会打印

    669256.02 6117662.09
    669258.61 6117664.39
    669258.05 6117665.08
Run Code Online (Sandbox Code Playgroud)

我在Python 3.3顺便说一句

Ash*_*ary 73

您可以使用迭代器:

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 如果您的列表有奇数个项目,这将引发 [`StopIteration`](https://docs.python.org/library/exceptions.html#StopIteration) 异常。 (12认同)

jam*_*lak 20

>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 在阅读了这样的文档之后,我会对文档说明同样的事情.每当一个hack被认为足够可行时,它就被称为成语.但那不会让它变得可读;-) (13认同)
  • @Alfe阅读官方Python文档**请**:http://docs.python.org/2/library/functions.html#zip ...尤其是说*"这使得成为一个成语的成语成为可能使用`zip(*[iter(s)]*n)`将数据序列分成n长组."* (8认同)
  • 哇.这几乎不可读,认为它是一个黑客.为-1.但是为了简洁起见+1. (7认同)
  • 显然,从来没有一种方法可以看到它. (3认同)
  • @Alfe然后好吧,我同意你的看法,python文档显然是错误的我们不应该听它 (2认同)
  • 别那么容易生气,jamylak ;-) 这并不是针对你。但请尝试考虑一下,如果下一个开发人员偶然发现这种习惯用法,他或她会怎么想。您真的认为除非您阅读了该文档部分,否则很容易理解它的作用吗?这让我强烈地想起了古老的 C 语言 `for (i=10; i-->0; ) { f(i); }` 这也很漂亮,但很难理解,除非您已经知道它或投入额外的时间来理解它的作用。 (2认同)

小智 8

食谱部分中的grouper示例itertools可以帮助您:http: //docs.python.org/3.3/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)
Run Code Online (Sandbox Code Playgroud)

然后你会使用:

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