获取所有/某些元素的列表的前n个元素

时间:2017-05-19 13:16:03

标签: python

我有一长串整数和索引子集,我希望得到每个索引的最后n个元素(n = 1,2,3,4,...)。 到目前为止的代码。

data = range(0, 20);
indexes = [8, 9, 10, 11];  
n = 4; #A parameter

for i in indexes:    
    t = [];
    for j in range(1, n+1):
       t.append(data[i-j]);
    print t;

这应该打印:

[4,5,6,7]
[5,6,7,8]
[6.7.8.9]
[7,8,9,10]

如何使用列表推导来摆脱内循环? 我试过像:

d[-n : i]

但它返回一个空数组。

3 个答案:

答案 0 :(得分:2)

这里的catch是列表切片而不是列表理解,列表切片语法如下:lst[start_index : end_index]

另外要记住的另一件事是阻止start_index < 0,因为我们可以使用max

是的,您可以将列表理解用作:

lst = range(20)
indices = [3, 7, 15]

n = 4

sub_lists = [lst[max(0, i-n):i] for i in indices]

print sub_lists
# [[0, 1, 2], [3, 4, 5, 6], [11, 12, 13, 14]]

答案 1 :(得分:0)

内循环的列表压缩将是

t = [d[i - n] for i in range(1, n + 1)]

答案 2 :(得分:0)

谢谢你们的回答。 这是我的去,在ZdaR的一点帮助下:

data = range(0, 20);
indexes = [2, 3, 4];
n = 4; #A parameter

for i in indexes:
    t = data[:i][max(-i, -n):];
    print t;

在我的情况下需要外部循环,但如果它不是,它将类似于ZdaR。

t = [data[:i][max(-i, -n):] for i in indexes];