단일 목록의 쌍

| | | | | |

나는 종종 쌍으로 목록을 처리해야 할 필요성을 발견했습니다. 어떤 것이 그것을 수행하는 비단결적이고 효율적인 방법인지 궁금하여 Google에서 이것을 찾았습니다.

 pairs = zip(t[::2], t[1::2]) 

나는 그것이 충분히 파이썬적이라고 생각했지만, 관용구 대 효율성, 몇 가지 테스트를 하기로 결정했습니다.

 itertools에서 가져온 시간 import islice, izip def pairs_1(t): return zip(t[::2], t[1::2]) def pairs_2(t): return izip(t[::2], t[ 1::2]) def 쌍_3(t): 반환 izip(islice(t,None,None,2), islice(t,1,None,2)) A = range(10000) B = xrange(len(A) )) def pairs_4(t): # t의 값 무시! t = B return izip(islice(t,None,None,2), islice(t,1,None,2)) for f for pairs_1, pairs_2, pairs_3 , pairs_4: # 페어링 시간 s = time.time() for i in range(1000): p = f(A) t1 = time.time() - s # 쌍을 사용한 시간 s = time.time() for 나는 울렸다 e(1000): p = f(A) for a, b in p: pass t2 = time.time() - s print t1, t2, t2-t1 

이것은 내 컴퓨터에 결과 : <전> <코드> 1.35109519958 1.24571323395 0.00257992744446 1.46182489395 1.45924496651 0.00251388549805 1.70076990128 1.69825601578 1.48668909073 2.63187503815 1.14518594742 0.105381965637

나는 "m 올바르게 해석 것을 의미한다이 경우 Python에서 목록, 목록 인덱싱 및 목록 슬라이싱을 구현하는 것은 매우 효율적입니다. 위안이 되기도 하고 예상치 못한 결과이기도 합니다.

목록을 쌍으로 순회하는 다른 "더 나은" 방법이 있습니까?

목록이 요소의 개수가 홀수인 경우 마지막 요소는 쌍에 포함되지 않습니다.

모든 요소가 포함되도록 하는 올바른 방법은 무엇입니까?

테스트에 대한 답변에서 다음 두 가지 제안을 추가했습니다.

def pairwise(t): it = iter(t) return izip(it, it) def chunkwise(t, size=2): it = iter(t) return izip(*[it]*size) 

결과는 다음과 같습니다.

0.00159502029419 1.25745987892 1.25586485863 0.00222492218018 1.23795199394 1.23572707176 

지금까지의 결과

가장 파이썬적이고 매우 효율적입니다.

pairs = izip](t[::2 , t[1::2]) 

가장 효율적이고 매우 Pythonic:

pairs = izip(*[iter(t)]*2) 

첫 번째 대답은 두 개의 반복자를 사용하는 반면 두 번째는 단일 요소.

홀수 개수의 요소가 있는 시퀀스를 처리하기 위해 제안된 제안은 이전 요소와 짝을 이루는 하나의 요소(None)를 추가하는 원래 시퀀스를 늘리는 것입니다. 마지막 요소는 itertools.izip_longest()로 얻을 수 있는 것입니다.

마지막으로

Python 3.x에서 zip ()itertools.izip()처럼 작동하고 itertools.izip()은 사라졌습니다.

이 문서가 문제를 해결하는 데 도움이 되었기를 바랍니다. 단일 목록의 쌍 외에 다른 exp 관련 주제를 확인하세요.

파이썬에서 뛰어나고 싶으십니까? 2022최고의 Python 온라인 과정에 대한 검토를 참조하세요. 데이터 과학에 관심이 있다면 R로 프로그래밍을 배우는 방법도 확인하세요.

그런데 이 자료는 다른 언어로도 제공됩니다.



Marie Ungerschaft

Vigrinia | 2022-11-29

sin은(는) 모든 것이 약간 혼란스럽습니다 😭 단일 목록의 쌍이(가) 만난 유일한 문제는 아닙니다.. 더 이상 나타나지 않기를 바랄뿐입니다

Boris Porretti

Boston | 2022-11-29

median은(는) 모든 것이 약간 혼란스럽습니다 😭 단일 목록의 쌍이(가) 만난 유일한 문제는 아닙니다.. 피드백과 함께 내일 돌아올 것입니다

Marie Wu

Milan | 2022-11-29

다른 답이 있지 않을까요? 뭐 단일 목록의 쌍 은(는) 정확히 무엇을 의미합니까?. 나는 그것이 최선의 방법인지 확신하지 못한다.

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers

News


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically