有没有更好的方法来遍历两个列表,每次获取一个元素?

163 投票
7 回答
203258 浏览
提问于 2025-04-15 17:07

我有一组纬度和一组经度,现在需要把这些纬度和经度配对起来。

我想知道,哪种方法更好:

  • A. 假设这两个列表的长度是一样的:

    for i in range(len(Latitudes)):
        Lat,Long=(Latitudes[i],Longitudes[i])
    
  • B. 或者:

    for Lat,Long in [(x,y) for x in Latitudes for y in Longitudes]:
    

(注意,B是错误的。这会给我所有的配对,等同于itertools.product()的结果)

你觉得这两种方法各有什么优缺点,或者哪种更符合Python的风格呢?

7 个回答

22

很高兴看到大家对 zip 的热爱。

不过需要注意的是,如果你使用的是 Python 3.0 之前的版本,标准库里的 itertools 模块有一个 izip 函数,它返回的是一个可迭代的对象,这在某些情况下更合适(特别是当你的经纬度列表很长的时候)。

在 Python 3 及以后的版本中,zip 的表现就像 izip 一样了。

53

另一种方法是使用 map

>>> a
[1, 2, 3]
>>> b
[4, 5, 6]
>>> for i,j in map(None,a,b):
    ...   print i,j
    ...
1 4
2 5
3 6

使用 mapzip 的一个区别是,使用 zip 时,新列表的长度和最短的列表长度是一样的。
举个例子:

>>> a
[1, 2, 3, 9]
>>> b
[4, 5, 6]
>>> for i,j in zip(a,b):
    ...   print i,j
    ...
1 4
2 5
3 6

在相同的数据上使用 map

>>> for i,j in map(None,a,b):
    ...   print i,j
    ...

    1 4
    2 5
    3 6
    9 None
308

这就是最符合Python风格的写法:

for lat, long in zip(Latitudes, Longitudes):
    print(lat, long)

撰写回答