Tek listeden çiftler

| | | | | |

Genellikle, bir listeyi çiftler halinde işleme ihtiyacı buldum. Bunu yapmanın Pythonic ve verimli yolunun hangisi olacağını merak ediyordum ve Google'da şunu buldum:

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

Bunun yeterince Pythonic olduğunu düşündüm, ancak Verimliliğe karşı deyimler, bazı testler yapmaya karar verdim:

 itertools'tan içe aktarma süresi içe aktarma islice, izip def pairs_1(t): dönüş zip(t[::2], t[1::2]) def pairs_2(t): dönüş izip(t[::2], t[ 1::2]) def pairs_3(t): dönüş izip(islice(t,Yok,Yok,2)), islice(t,1,Yok,2)) A = aralık(10000) B = xrange(len(A) )) def pairs_4(t): # t = B değerini göz ardı edin t = B dönüş izip(islice(t,None,None,2), islice(t,1,None,2)) for f in pairs_1, pairs_2, pairs_3 , pairs_4: # time eşleşmesi s = time.time() için i aralığında(1000): p = f(A) t1 = time.time() - s # çiftleri kullanarak s = time.time() için çaldım e(1000): p = f(A) for a, b in p: pass t2 = time.time() - s print t1, t2, t2-t1 

Bunlar şunlardı: bilgisayarımdaki sonuçlar:

1.48668909073 2.63187503815 1.1451859742 0.105381965637 1.35109519958 1.24571323395 0.00257992744446 1.46182489395 1.45924496651 0.00251388549805 1.70076990128 1.69825601578 'un doğru olarak yorumlanması gerektiği anlamına gelir bu Python'da listelerin uygulanması, liste indeksleme ve liste dilimleme çok verimlidir. Bu hem rahatlatıcı hem de beklenmedik bir sonuç.

Bir listeyi çiftler halinde geçmenin başka, "daha iyi" bir yolu var mı?

Liste tek sayıda öğe varsa, sonuncusu çiftlerin hiçbirinde olmaz.

Tüm öğelerin dahil edilmesini sağlamanın doğru yolu nedir?

Testlere verilen yanıtlardan şu iki öneriyi ekledim:

def çifti(t): it = iter(t) dönüş izip(it, it) def yığını(t, size=2): iter(t) dönüş izip(*[it]*size) 

Sonuçlar:

0.00159502029419 1.25745987892 1.25586485863 0,00222492218018 1.23795199394 1.23572707176 

Şimdiye kadarki sonuçlar

En pitonik ve çok verimli:

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

En verimli ve çok pitonik:

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

İlk yanıtın iki yineleyici kullandığını ve ikinci yanıtın tek bir öğe.

Tek sayıda öğeye sahip dizilerle başa çıkmak için, öneri, öncekiyle eşleştirilen bir öğe (Yok) ekleyerek orijinal diziyi genişletmek olmuştur. son öğe, itertools.izip_longest() ile elde edilebilecek bir şey.

Son olarak

Python 3.x'te zip olduğunu unutmayın. (), itertools.izip() gibi davranır ve itertools.izip() kaybolur.

Bu makalenin sorunu çözmenize yardımcı olduğunu umuyoruz. Tek listeden çiftler dışında, exp ile ilgili diğer konulara bakın.

Python'da başarılı olmak ister misiniz? en iyi Python çevrimiçi kursları 2022 hakkındaki incelememize bakın. Veri Bilimi ile ilgileniyorsanız, R'de programlamayı nasıl öğreneceğinizi de kontrol edin.

Bu arada, bu materyal diğer dillerde de mevcuttur:



Schneider Chamberlet

Milan | 2022-11-29

find her şey biraz kafa karıştırıcı 😭 Tek listeden çiftler karşılaştığım tek sorun değil. Bunun en iyi yöntem olduğundan tam olarak emin değilim

Xu Williams

Texas | 2022-11-29

find her şey biraz kafa karıştırıcı 😭 Tek listeden çiftler karşılaştığım tek sorun değil. Bunun en iyi yöntem olduğundan tam olarak emin değilim

Angelo Sikorski

Prague | 2022-11-29

Belki başka cevaplar da vardır? Ne Tek listeden çiftler tam olarak ne anlama geliyor?. Dün kontrol edildi, işe yarıyor!

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