有没有更好的方法来遍历两个列表,每次获取一个元素?
我有一组纬度和一组经度,现在需要把这些纬度和经度配对起来。
我想知道,哪种方法更好:
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
使用 map
和 zip
的一个区别是,使用 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)