2014-04-18 26 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