我有一个字符串列表 - foo
和另一个整数列表 - bar
,可以跟踪foo
中的重要索引。
例如:
foo = [{}.format(i) for i in range(1, 11)] # not necessarily of this format
bar = [0, 3, 5]
我想创建一个用于创建列表列表的配方,每个列表都是根据foo
中的索引拆分bar
获得的。
以上示例的预期输出:
[['1', '2', '3'], ['4', '5'], ['6', '7', '8', '9', '10']]
为实现这一目标,我创建了以下功能,该功能正常:
result = []
for index, value in enumerate(b):
if index == len(b) - 1:
result.append(a[value:])
elif index == 0 and value != 0:
result.append(a[0: value])
else:
result.append(a[value: b[index + 1]])
但是,由于我的C-Java背景,我觉得这段代码非常非Pythonic
我想知道这个问题的更好解决方案(也许我们可以某种方式使用itertools
。
答案 0 :(得分:2)
你可以这样做:
In [3]: [foo[a:b] for a, b in zip(bar, bar[1:]+[None])]
Out[3]: [['1', '2', '3'], ['4', '5'], ['6', '7', '8', '9', '10']]
答案 1 :(得分:1)
以下是使用列表理解的一种方法:
In [107]: bar = bar + [len(foo)] if bar[-1] < len(foo) else bar
In [110]: [foo[i:j] for i, j in zip(bar, bar[1:])]
Out[110]: [['1', '2', '3'], ['4', '5'], ['6', '7', '8', '9', '10']]