Paren uit enkele lijst

| | | | | |

Vaak genoeg heb ik de behoefte gevonden om een lijst per paar te verwerken. Ik vroeg me af wat de pythonische en efficiënte manier zou zijn om dit te doen, en vond dit op Google:

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

Ik dacht dat dat pythonisch genoeg was, maar na een recente discussie met idioom versus efficiëntie, besloot ik een aantal tests uit te voeren:

 importtijd uit 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 pairs_3(t): return izip(islice(t,None,None,2), islice(t,1,None,2)) A = range(10000) B = xrange(len(A) )) def pairs_4(t): # negeer waarde van t!t = B retourneer izip(islice(t,None,None,2), islice(t,1,None,2)) voor f in pairs_1, pairs_2, pairs_3 , pairs_4: # time the pairing s = time.time() for i in range(1000): p = f(A) t1 = time.time() - s # time met behulp van de paren s = time.time() voor ik ben in gesprek e(1000): p = f(A) voor a, b in p: pas t2 = time.time() - s print t1, t2, t2-t1 

Dit waren de resultaten op mijn computer:

1.48668909073 2.63187503815 1.14518594742 0.105381965637 1.3510519958 1.24571323395 0.00257992744446 1.46182489395 1.45924496651 0.00251388549805 1.70076990128 1.69825601578 
de implementatie van lijsten, indexering van lijsten en snijden van lijsten in Python is zeer efficiënt. Het is een zowel geruststellend als onverwacht resultaat.

Is er een andere, "betere" manier om een lijst in paren te doorlopen?

Merk op dat als de lijst heeft een oneven aantal elementen, dan zal de laatste niet in een van de paren zitten.

Wat zou de juiste manier zijn om ervoor te zorgen dat alle elementen worden opgenomen?

Ik heb deze twee suggesties uit de antwoorden aan de tests toegevoegd:

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

Dit zijn de resultaten:

0.00159502029419 1.25745987892 1.25586485863 0.00222492218018 1.23795199394 1.23572707176 

Resultaten tot nu toe

Meest pythonisch en zeer efficiënt:

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

Meest efficiënt en zeer pythonisch:

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

Het kostte me even om te zeggen dat het eerste antwoord twee iterators gebruikt, terwijl het tweede antwoord een enkele.

Om met reeksen met een oneven aantal elementen om te gaan, is de suggestie geweest om de originele reeks te vergroten door één element (Geen) toe te voegen dat wordt gekoppeld aan de vorige laatste element, iets dat kan worden bereikt met itertools.izip_longest().

Eindelijk

Merk op dat in Python 3.x, zip () gedraagt zich als itertools.izip(), en itertools.izip() is verdwenen.

We hopen dat dit artikel u heeft geholpen om het probleem op te lossen. Bekijk naast Paren uit enkele lijst ook andere exp-gerelateerde onderwerpen.

Wilt u uitblinken in Python? Bekijk onze recensie van de  beste online Python-cursussen 2022. Als je geïnteresseerd bent in Data Science, bekijk dan ook hoe je programmeert in R.

Trouwens, dit materiaal is ook beschikbaar in andere talen:



Javier Gonzalez

Moscow | 2022-11-29

Misschien zijn er andere antwoorden? Wat betekent Paren uit enkele lijst precies?. Kom morgen terug met feedback

Julia Williams

Moscow | 2022-11-29

Misschien zijn er andere antwoorden? Wat betekent Paren uit enkele lijst precies?. Ik hoop alleen dat dat niet meer naar voren komt

Carlo Richtgofen

Paris | 2022-11-29

exp is alles een beetje verwarrend 😭 Paren uit enkele lijst is niet het enige probleem dat ik tegenkwam. Ik hoop alleen dat dat niet meer naar voren komt

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