基于另一个列表中的索引迭代列表

时间:2017-01-23 12:45:37

标签: python list python-3.x loops

我有一个字符串列表 - 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

2 个答案:

答案 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']]