我有一长串整数和索引子集,我希望得到每个索引的最后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]
但它返回一个空数组。
答案 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];