创建列表列表时,根据索引弹出元素+弹出的项目

时间:2018-07-25 14:27:24

标签: python list slice

我已经看到关于如何从平面列表中创建列表的很好的答案。我的问题是在创建列表列表之前先弹出一些值,然后得到以下结果:

l = ['119', '222', '219', '293', '4', '179', '124', '500', '235', '7']

wanted_output = [['119', '222', '219', '293'], '4', ['179', '124', '500', '235'], '7']

到目前为止,我已经尝试过:

ll = [l[i:i+4] for i in range(0, len(l), 4)]
[['119', '222', '219', '293'], ['4', '179', '124', '500'], ['235', '7']]

结果不是我想要的。我想实现每四个元素包含一个列表列表,下一个元素(每个第4个元素)是独立且独立的元素,例如,在这种情况下,我要获取的元素是4和7。

2 个答案:

答案 0 :(得分:6)

>>> [x for i in range(0, len(l), 5) for x in (l[i:i+4], l[i+4])]
[['119', '222', '219', '293'], '4', ['179', '124', '500', '235'], '7']

答案 1 :(得分:1)

如果输入的长度可被5整除,则可以使用

from itertools import chain

l = ['119', '222', '219', '293', '4', '179', '124', '500', '235','7']

list(chain.from_iterable((a, b) for *a, b in zip(*[iter(l)]*5)))
# [['119', '222', '219', '293'], '4', ['179', '124', '500', '235'], '7']

,它不需要可迭代的输入是可切片的。