來自單個列表的對

| | | | | |

很多時候,我發現需要成對處理列表。我想知道哪種方法是 Pythonic 和有效的方法,並在 Google 上找到了這個:

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

我認為這已經足夠 Pythonic了,但是在最近涉及 成語與效率,我決定做一些測試:

從 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): # 忽略 t 的值!t = B return izip(islice(t,None,None,2), islice(t,1,None,2)) for f in pairs_1,pairs_2,pairs_3 , pair_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.48668909073 2.63187503815 1.14518594742 0.105381965637 1.35109519958 1.24571323395 0.00257992744446 1.46182489395 1.45924496651 0.00251388549805 1.70076990128 1.69825601578   

如果I“米正確地解釋它們,應該意味著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.23795199394 1.23572707176 

目前的結果

最pythonic且非常高效:

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

最高效且非常pythonic:

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

我花了一點時間才發現第一個答案使用了兩個迭代器,而第二個使用了一個單一的。

為了處理具有奇數個元素的序列,建議增加原始序列添加一個與前一個配對的元素(None)最後一個元素,可以通過 itertools.izip_longest() 來實現。

Finally

注意,在 Python 3.x 中,zip () 表現為 itertools.izip(),而 itertools.izip() 消失了。

我們希望本文能幫助您解決問題。 除了 來自單個列表的對,查看其他與 exp 相關的主題。

想在 Python 中出類拔萃? 查看我們對 最佳 Python 在線課程 2022的評論。 如果您對數據科學感興趣,請查看如何學習 R 編程

順便說一句,此材料也有其他語言版本:



Manuel Williams

Texas | 2022-11-29

也许有其他的答案?什么是來自單個列表的對?到底是什么意思?. 昨天檢查了,有效!

Davies Robinson

Paris | 2022-11-29

简单地说,很清楚。谢谢你的分享。來自單個列表的對和其他问题的islice一直是我的弱点😁。. 我只是不太確定這是最好的方法

Marie Chamberlet

Vigrinia | 2022-11-29

简单地说,很清楚。谢谢你的分享。來自單個列表的對和其他问题的mean一直是我的弱点😁。. 將在我的學士論文中使用它

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