如何在python中创建平面列表中的列表列表

时间:2017-10-24 10:10:14

标签: python list

我有一个清单:

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

有没有办法创建列表列表,以便:

l = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

是否可以创建列表大小不同的列表列表?例如:

l = [['a', 'b'], ['c', 'd', 'e', 'f'], ['g'], ['h', 'i']]

3 个答案:

答案 0 :(得分:0)

对于一致的块大小n,您可以执行以下操作:

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

n = 3
l2 = [l[i:i + n] for i in range(0, len(l), n)]
l2
# [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

鉴于拆分索引(您可以从块大小列表中轻松生成),您可以生成自定义切片:

splits = [0, 2, 6, 7, 9]
l2 = [l[start:end] for start, end in zip(splits, splits[1:])]
l2
# [['a', 'b'], ['c', 'd', 'e', 'f'], ['g'], ['h', 'i']]

答案 1 :(得分:0)

1。对于{{1>} 定义的内部列表大小

multi-dimensioned list

2。对于{{1>} 随机内部列表大小(不幸的是,这有点粗糙):

>>> inner_size = 3
>>> out = [ l[i:i+inner_size] for i in range(0, len(l), inner_size) ]
>>> out
=> [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

答案 2 :(得分:0)

这是一个简单的解决方案,您可以在变量chunk_sizes中将自己的块大小设置为列表或元组或整数

def chunk_list(l,chunk_sizes):
    if isinstance(chunk_sizes,int):
        for i in range(0,len(l),chunk_sizes):
            yield l[i:i + chunk_sizes]
    else:
        start = 0
        for size in chunk_sizes:
            if start < len(l):
                yield l[start:start + size]
                start += size

l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']

# custom chunk_sizes list
chunk_sizes = [2,4,1,2]
print ([sl for sl in chunk_list(l,chunk_sizes)])
#prints [['a', 'b'], ['c', 'd', 'e', 'f'], ['g'], ['h', 'i']]


# integer chunk_sizes
chunk_sizes = 3
print ([sl for sl in chunk_list(l,chunk_sizes)])
#prints [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]