2016-04-05 15 views
3

私はリストのリストをPythonでスライスする必要があります。Pythonのリストのスライス

A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 
idx = slice(0,4) 
B = A[:][idx] 

上記のコードは私に適切な出力を与えるものではありません。

私が欲しいのです:[[1,2,3],[1,2,3],[1,2,3]]

+0

あなたの質問で使用されていますか?また、 'slice(0,4)'はなぜうまくいけばサブリストごとに3つの要素を与えるのでしょうか? –

答えて

7

、それは非常に簡単です - あなただけのスライスを行うことができます:

In [1]: import numpy as np 

In [2]: A = np.array([[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]]) 

In [3]: A[:,:3] 
Out[3]: 
array([[1, 2, 3], 
     [1, 2, 3], 
     [1, 2, 3]]) 

あなたは、もちろん、バックlistからnumpy.arrayを変換することができます:

あなたがロジックを見た
In [4]: A[:,:3].tolist() 
Out[4]: [[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+0

私は 'A [:、:3] .tolist()'と言っています – MaxU

+0

@MaxU、更新、ありがとう! – soon

1

あなたのようなリストの内包表記を使用することができます。iはあなたが必要とするどのように多くの要素に基づいて1,2,3などである[x[0:i] for x in A]

+0

これはOPコードで 'x [idx]'にする必要があります –

+0

なぜですか?彼は各リストから最初のidx要素を必要とします。 – Sid

+0

@WayneWerner正解ですが、私はidxの意味を変更しました。スライスの代わりに生のint – Sid

0

次のいずれかの

>>> [a[slice(0,3)] for a in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 

または:

>>> [list(filter(lambda x: x<=3, a)) for a in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 
+1

に変更するように修正* OPの問題を解決している間、私はそれが何のために起こったのか疑う。 –

+0

@WayneWerner更新plzを参照してください:) – haifzhan

7

非常にまれスライスオブジェクトを使用していないと、リスト内包表記を採用するよりも読みやすい、そしてこれは、これらの例ではありません。

>>> A = [[1,2,3,4,5],[1,2,3,4,5],[1,2,3,4,5]] 
>>> [sublist[:3] for sublist in A] 
[[1, 2, 3], [1, 2, 3], [1, 2, 3]] 

これは非常に明確です。 Aのすべてのサブリストについて、最初の4つの要素のリストを私に教えてください。 numpyので

関連する問題