2014-04-18 57 views
0

是否有辦法每隔幾個項目切片列表然後將其反轉?
例如,我可以把:通過在Python3.x中切片來操作列表

1 2 3 4 5 6 7 8 9 

到:

7 8 9 4 5 6 1 2 3 

有一個簡單的切片表示法,可以實現類似的這一目標列出[:: - 1]用於逆轉列表?

+0

「有沒有......切片符號可以實現這個目標」是的。 「是否有一個***簡單的***切片符號可以實現這個目標」No.掛上讓我寫點東西了.... –

+0

我想切片它的每個項目,然後扭轉它們,如果這有助於。 – somebody

回答

2

沒有此片的符號,這裏是如何(,Python的3.x的代碼包含在這到底是與Python 2.x的),我可能會做:

>>> lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> [x for s in reversed(zip(*[iter(lst)]*3)) for x in s] 
[7, 8, 9, 4, 5, 6, 1, 2, 3] 

這種方法用於集羣元素融入n長組直接來自zip文檔,所以這裏的做法是創建組3,反向結果列表中,然後用一個列表理解壓扁。

或者利用迭代模塊,採用grouper recipechain.from_iterable

from itertools import izip_longest, chain 

def grouper(iterable, n, fillvalue=None): 
    "Collect data into fixed-length chunks or blocks" 
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx 
    args = [iter(iterable)] * n 
    return izip_longest(fillvalue=fillvalue, *args) 

lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
result = list(chain.from_iterable(reversed(list(grouper(lst, 3))))) 

的Python 3版本:

對於第一種方法,你將需要由zip返回發電機轉換到一個列表,否則reversed將失敗:

>>> [x for s in reversed(list(zip(*[iter(lst)]*3))) for x in s] 
[7, 8, 9, 4, 5, 6, 1, 2, 3] 

而在itertools方法中,您只需在導入語句和grouper函數內部將izip_longest替換爲zip_longest即可。

+0

這是正確的python3.3? – somebody

+1

剛剛編輯了Python 3所需的更改。 –

1
QTYPERGROUP = 3 
lst = [1,2,3,4,5,6,7,8,9] 

reversed_by_group = [el for sublist in list(reversed(list(zip(*[iter(lst)]*QTYPERGROUP)))) for el in sublist] 
# [7, 8, 9, 4, 5, 6, 1, 2, 3] 

這是漫長而醜陋的,但它的確是工作。請注意,這隻適用於len(lst) % QTYPERGROUP == 0,否則將忽略其餘部分。例如

QTYPERGROUP = 4 
reversed_by_group = [el for sublist in list(reversed(list(zip(*[iter(lst)]*QTYPERGROUP)))) for el in sublist] 
# [5, 6, 7, 8, 1, 2, 3, 4] there's no "9" 
2

numpy可以讓這樣的事情您輕鬆:

>>> import numpy as np 
>>> a = np.arange(1, 10) 
>>> result = a.reshape((3, -1))[::-1].ravel() #if you OK with getting np.array 
>>> result 
array([7, 8, 9, 4, 5, 6, 1, 2, 3]) 

如果你想有一個列表

>>> result = a.reshape((3, -1))[::-1].ravel().tolist() #if you want to get back a list 
>>> result 
[7, 8, 9, 4, 5, 6, 1, 2, 3] 

此解決方案僅適用如果列表可以分爲n個等份。

+0

它將考慮平分。如何進口Numpy(我從來沒有使用過它) – somebody

+0

我遺漏了'import numpy as np',但你必須安裝它。 – Akavall

+0

因此,在沒有安裝numpy的情況下不能使用實現? – somebody