我有一个清单:
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']]
答案 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']]