programing

2개의 리스트에 걸쳐 반복하여 각 리스트에서1개의 요소를 얻는 더 좋은 방법이 있을까요?

muds 2023. 4. 16. 15:56
반응형

2개의 리스트에 걸쳐 반복하여 각 리스트에서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())

각각의 상대적인 장점에 대한 생각은? 아니면 어떤 것이 더 비단뱀 같은가?

이것은 당신이 얻을 수 있는 최대한의 피조어입니다.

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과 비교한 맵 사용의 한 가지 차이점은 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반복 가능(특히 격자/길이 목록이 매우 긴 경우)을 반환하는 함수입니다.

python 3 이후zip처럼 행동하다izip.

Latitude 및 Latitude 목록이 크고 로딩이 느릴 경우:

from itertools import izip
for lat, lon in izip(latitudes, longitudes):
    process(lat, lon)

또는 for-loop을 피하고 싶은 경우

from itertools import izip, imap
out = imap(process, izip(latitudes, longitudes))

2개의 리스트의 요소를 동시에 반복하는 것을 ziping이라고 합니다.python은 여기에 기재되어 있는 기능을 내장하고 있습니다.

>>> 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()몇 년 늦은 건 알지만 그래도 기여하고 싶어요이건 파이썬3에 있어요

주의: python 2.x에서는zip()는 튜플 목록을 반환합니다.Python 3.x에서는zip()반복기를 반환합니다. itertools.izip()in python 2.x ==zip()python 3.x의 경우

튜플 목록을 작성하는 것처럼 보이므로, 다음 코드는 여러분이 하고 있는 일을 성취하기 위한 가장 버마적인 방법입니다.

>>> 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(), 몇 나노초 혹은 몇 나노초, 그리고 Pythonic과 비교해서 생각되는 것의 새로운 표준이 되고 있다.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]

언급URL : https://stackoverflow.com/questions/1919044/is-there-a-better-way-to-iterate-over-two-lists-getting-one-element-from-each-l

반응형