gpt4 book ai didi

python - 反转列表的相同大小的 block

转载 作者:太空狗 更新时间:2023-10-30 02:26:22 25 4
gpt4 key购买 nike

如果我有一个列表:

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

我的目标是将它分成大小相等的 n block ,反转每个 block ,然后将 block 按顺序放回。因此,对于上面的示例,对于 block 大小 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])]

或参数化 block 大小:

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(..) 表示你反转等)

关于python - 反转列表的相同大小的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45256544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com