次の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]
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
enumerate
を使用する場合、doインデックスにアクセスできます。
list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
実際のユースケースがより複雑でない限り、@ 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を使用することをお勧めします