web-dev-qa-db-ja.com

Pythonインデックスへのアクセスを含むリストの理解/列挙は可能ですか?

次のPythonコードを使用して、list1の1から3までのインデックスを持つすべてのアイテムを新しいlist2に追加します。

for ind, obj in enumerate(list1):
    if 4> ind > 0: list2.append(obj)

列挙を通じてインデックスにアクセスできない場合、pythonリスト内包表記を使用してこれをどのように記述しますか?

何かのようなもの:

list2 = [x for x in list1 if 4>ind>0]

しかし、「ind」番号がないので、これは機能しますか? :

list2 = [x for x in enumerate(list1) if 4>ind>0]
73
Pav Ametvic
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
148
Pavel Anossov

enumerateを使用する場合、doインデックスにアクセスできます。

list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
31
BrenBarn

実際のユースケースがより複雑でない限り、@ wimで提案されているリストスライスを使用する必要があります。

>>> list1 = ['zero', 'one', 'two', 'three', 'four', 'five', 'six']
>>> [x for ind, x in enumerate(list1) if 4 > ind > 0]
['one', 'two', 'three']
>>> list1[1:4]
['one', 'two', 'three']

より複雑な場合-実際にインデックスが必要ない場合-スライスまたはisliceを反復処理する方が明確です

list2 = [x*2 for x in list1[1:4]]

または

from itertools import islice
list2 = [x*2 for x in islice(list1, 1, 4)]

小さなスライスの場合、単純なlist1[1:4]。スライスが非常に大きくなる可能性がある場合は、メモリのコピーを回避するためにisliceを使用することをお勧めします

6
John La Rooy