反转列表的大小相等的块

cs95

如果我有清单:

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3] 

我的目标是将其拆分为大小相等的块n,反转每个块,然后按顺序放回这些块。因此,对于上面的示例,对于块大小为4,我将得到:

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3] 
[_________]  [_________] [________]  [______]
     |            |           |          | 
     1            2           3          4 (this is smaller than 4 but receives the same treatment)

                     ||

[4, 3, 2, 1,    4, 3, 2, 1,      4, 3, 2, 1,     3, 2, 1]

这就是我所拥有的:

n = 4
l = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3] 
chunks = [l[i : i + n] for i in range(0, len(l), n)]
print(chunks)
# [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3]]

for i in range(len(chunks)):
    chunks[i] = list(reversed(chunks[i])) # or chunks[i] = chunks[i][::-1]

from functools import reduce
out = list(reduce(lambda x, y: x + y, chunks))

print(out)
# [4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 3, 2, 1]

我认为这不是很好。还有另外一种更好地利用python库的方法吗?

威廉·范昂塞姆

如何使用以下列表理解:

[x for i in range(0,len(l),4) for x in reversed(l[i:i+4])]

或参数化的块大小:

chunk = 4
[x for i in range(0,len(l),chunk) for x in reversed(l[i:i+chunk])]

这将产生:

>>> [x for i in range(0,len(l),4) for x in reversed(l[i:i+4])]
[4, 3, 2, 1, 4, 3, 2, 1, 4, 3, 2, 1, 3, 2, 1]

为您的给定列表。此外,我猜这是声明性的(reversed(..)表示您反转等)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章