緯度のリストと経度の1つがあり、緯度と経度のペアを反復処理する必要があります。
より良いですか:
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()
と同等のすべてのペアが得られます)
それぞれの相対的なメリットについての考え、またはどちらがよりパイソン的ですか?
これはあなたが得ることができる限りPythonicです:
for lat, long in Zip(Latitudes, Longitudes):
print lat, long
これを行う別の方法は、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
Zipと比較したマップの使用における1つの違いは、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
同じデータでマップを使用する:
>>> for i,j in map(None,a,b):
... print i,j
...
1 4
2 5
3 6
9 None
こちらの回答でZip
に対する多くの愛情を見ることができます。
ただし、3.0より前のpythonバージョンを使用している場合、標準ライブラリのitertools
モジュールには、イテレートを返すizip
関数が含まれていることに注意してください。この場合(特に、latt/longsのリストが非常に長い場合)。
python 3以降ではZip
はizip
のように動作します。
緯度と経度のリストが大きく、遅延ロードされる場合:
from itertools import izip
for lat, lon in izip(latitudes, longitudes):
process(lat, lon)
または、forループを避けたい場合
from itertools import izip, imap
out = imap(process, izip(latitudes, longitudes))
2つのリストの要素を同時に反復処理することはzip圧縮と呼ばれ、pythonはそのための組み込み関数を提供します。これは文書化されています here .
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = Zip(x, y)
>>> zipped
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = Zip(*zipped)
>>> x == list(x2) and y == list(y2)
True
[pydocsからの例]
あなたの場合、それは単純になります:
for (lat, lon) in Zip(latitudes, longitudes):
... process lat and lon
for Lat,Long in Zip(Latitudes, Longitudes):
この投稿は、Zip()
に役立ちました。数年遅れていることは知っていますが、まだ貢献したいと思っています。これはPython 3にあります。
注:python 2.xでは、Zip()
はタプルのリストを返します。 Python 3.xでは、Zip()
は反復子を返します。 itertools.izip()
in python 2.x == Zip()
in python 3.x
タプルのリストを作成しているように見えるので、次のコードはあなたがしていることを達成しようとする最もPython的な方法です。
>>> lat = [1, 2, 3]
>>> long = [4, 5, 6]
>>> Tuple_list = list(Zip(lat, long))
>>> Tuple_list
[(1, 4), (2, 5), (3, 6)]
または、より複雑な操作が必要な場合は、list comprehensions
(またはlist comps
)を使用できます。リストの内包表記もmap()
とほぼ同じ速度で実行され、数ナノ秒を与えたり受けたりします。また、Python [ic]対map()
と見なされるものの新しい基準になりつつあります。
>>> lat = [1, 2, 3]
>>> long = [4, 5, 6]
>>> Tuple_list = [(x,y) for x,y in Zip(lat, long)]
>>> Tuple_list
[(1, 4), (2, 5), (3, 6)]
>>> added_tuples = [x+y for x,y in Zip(lat, long)]
>>> added_tuples
[5, 7, 9]