Katakanlah kita memiliki daftar angka dari 0 hingga 1000. Apakah ada cara pythonic / efisien untuk menghasilkan daftar item ke-10 pertama dan selanjutnya, yaitu [0, 10, 20, 30, ... ]
?
Ya, saya bisa melakukan ini menggunakan for loop, tapi saya bertanya-tanya apakah ada cara yang lebih rapi untuk melakukan ini, mungkin bahkan dalam satu baris?
0
berlebihan dil[0::10]
.l[::10]
lebih mudah dibaca, kurang membingungkan.source_list[::10]
adalah yang paling jelas, tetapi ini tidak berhasil untuk setiap iterable dan tidak efisien untuk daftar besar.itertools.islice(source_sequence, 0, None, 10)
bekerja untuk semua iterable dan hemat memori, tetapi mungkin bukan solusi tercepat untuk daftar besar dan langkah besar.(source_list[i] for i in xrange(0, len(source_list), 10))
sumber
Anda dapat menggunakan operator slice seperti ini:
sumber
L[2::2]
Dari manual:
s[i:j:k] slice of s from i to j with step k
sumber
Ini memilih setiap elemen ke-10 dari daftar.
sumber
Mengapa tidak menggunakan parameter langkah fungsi rentang juga untuk mendapatkan:
Sebagai perbandingan, di mesin saya:
sumber
sumber
Berikut ini adalah implementasi yang lebih baik dari pemahaman daftar "setiap item ke-10", yang tidak menggunakan konten daftar sebagai bagian dari tes keanggotaan:
Tapi ini masih jauh lebih lambat daripada hanya menggunakan daftar slicing.
sumber
Pemahaman daftar persis dibuat untuk itu:
Anda bisa mendapatkan lebih banyak info tentang mereka di dokumentasi resmi python: http://docs.python.org/tutorial/datastructures.html#list-comprehensions
sumber