2017-05-19 10 views
0

私は最後のn個の要素(n = 1,2,3,4、..)を取得するために、長い整数のリストとインデックスのサブセットを持っています。 。) これまでのコードです。すべての/いくつかの要素のリストのn個前の要素を取得します

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] 

を、それは空の配列を返します。 lst[start_index : end_index]

+2

サンプル入力と予想される出力で質問をサポートできますか? – ZdaR

+1

変数 'd'とは何ですか? – RafaelC

+0

dはデータの最初の文字です!打ち間違え。ごめんなさい –

答えて

2

になりますここでキャッチは、リストのスライスではなく、リスト内包表記であり、リストのスライスの構文は次のようになります。

また、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]] 
0

内側のループのリスト圧縮が

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

は、両方のあなたの答えをいただき、ありがとうございます。 ここに私のGoが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]; 
関連する問題