Pertimbangkan kode Python berikut yang saya tambahkan baru list2
semua item dengan indeks dari 1 hingga 3 dari list1
:
for ind, obj in enumerate(list1):
if 4 > ind > 0:
list2.append(obj)
Bagaimana Anda akan menulis ini menggunakan pemahaman daftar, jika saya tidak memiliki akses ke indeks melalui enumerate?
sesuatu seperti:
list2 = [x for x in list1 if 4 > ind > 0]
tetapi karena saya tidak punya ind
nomor, apakah ini akan berhasil?
list2 = [x for x in enumerate(list1) if 4 > ind > 0]
python
list
list-comprehension
Pav Ametvic
sumber
sumber
list1[1:4]
sini[x for x in list1[1:4]]
:?list2 = list1[1:4]
Jawaban:
list2 = [x for ind, x in enumerate(list1) if 4 > ind > 0]
sumber
Jika Anda menggunakan
enumerate
, Anda lakukan memiliki akses ke indeks:list2 = [x for ind, x in enumerate(list1) if 4>ind>0]
sumber
Kecuali kasus penggunaan Anda yang sebenarnya lebih rumit, Anda sebaiknya menggunakan potongan daftar seperti yang disarankan oleh @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']
Untuk kasus yang lebih rumit - jika Anda tidak benar-benar membutuhkan indeks - akan lebih jelas untuk melakukan iterasi pada slice atau islice
list2 = [x*2 for x in list1[1:4]]
atau
from itertools import islice list2 = [x*2 for x in islice(list1, 1, 4)]
Untuk irisan kecil, sederhana
list1[1:4]
. Jika irisan menjadi cukup besar, mungkin lebih baik menggunakan islice untuk menghindari penyalinan memorisumber