Jadi saya ingin membuat list yang merupakan sublist dari beberapa list yang ada.
Sebagai contoh,
L = [1, 2, 3, 4, 5, 6, 7]
, Saya ingin membuat sublist li
yang li
berisi semua elemen di L
posisi ganjil.
Sementara saya bisa melakukannya dengan
L = [1, 2, 3, 4, 5, 6, 7]
li = []
count = 0
for i in L:
if count % 2 == 1:
li.append(i)
count += 1
Tetapi saya ingin tahu apakah ada cara lain untuk melakukan hal yang sama secara efisien dan dalam jumlah langkah yang lebih sedikit.
Jawaban:
Larutan
Ya kamu bisa:
Dan ini semuanya. Hasilnya akan berisi elemen yang ditempatkan pada posisi berikut (
0
berbasis, jadi elemen pertama ada di posisi0
, kedua di1
dll.):jadi hasilnya (angka sebenarnya) adalah:
Penjelasan
Bagian
[1::2]
akhir hanyalah notasi untuk pemotongan daftar. Biasanya dalam bentuk berikut:Jika kita menghilangkan
start
, default (0
) akan digunakan. Jadi elemen pertama (pada posisi0
, karena indeks0
berbasis-) akan dipilih. Dalam hal ini elemen kedua akan dipilih.Karena elemen kedua dihilangkan, default digunakan (akhir daftar). Jadi daftarnya sedang diulang dari elemen kedua sampai akhir .
Kami juga menyediakan argumen ketiga (
step
) yaitu2
. Artinya satu elemen akan dipilih, elemen berikutnya akan dilewati, dan seterusnya ...Jadi, secara ringkas, dalam hal ini
[1::2]
berarti:step=2
, jadi kita melewatkan satu, sebagai kebalikan daristep=1
yang default),EDIT : @PreetKukreti memberikan tautan untuk penjelasan lain tentang notasi pemotongan daftar Python. Lihat di sini: Jelaskan notasi irisan Python
Ekstra - mengganti penghitung dengan
enumerate()
Dalam kode Anda, Anda secara eksplisit membuat dan meningkatkan penghitung. Dengan Python, hal ini tidak diperlukan, karena Anda dapat menghitung melalui beberapa iterable menggunakan
enumerate()
:Di atas memiliki tujuan yang persis sama dengan kode yang Anda gunakan:
Lebih lanjut tentang meniru
for
loop dengan penghitung dengan Python: Mengakses indeks dengan loop 'for' Pythonsumber
(0,2,4,6)
; sepertinya OP menginginkan indeks(1,3,5)
, yang akan diberikan oleh[1,2,3,4,5,6,7][1::2]
.1
).list
pemotongan Python . Ini sedikit berbeda, terutama karenalist
slice tidak menyimpan referensi ke daftar asli (dalam Numarray Anda perlu memanggil secara eksplisit.copy()
agar sesuatu yang tidak mereferensikan array asli). Tetapi menyenangkan memiliki sesuatu yang mungkin lebih baik bagi beberapa pembaca. Maukah Anda mengeposkan tautan ini di komentar, jadi saya dapat memberi suara positif dan itu akan muncul tepat di bawah jawaban?Untuk posisi ganjil , Anda mungkin menginginkan:
sumber
Saya suka pemahaman Daftar karena sintaks Matematika (Set) mereka. Jadi bagaimana dengan ini:
Pada dasarnya, jika Anda menghitung daftar, Anda akan mendapatkan indeks
x
dan nilainyay
. Apa yang saya lakukan di sini adalah memasukkan nilaiy
ke dalam daftar keluaran (genap atau ganjil) dan menggunakan indeksx
untuk mengetahui apakah titik itu ganjil (x%2 != 0
).sumber
Anda dapat menggunakan operator DAN bitwise
&
. Yuk simak dibawah ini:Operator Bitwise AND digunakan dengan 1, dan alasan kerjanya karena, angka ganjil jika ditulis dalam biner harus memiliki digit pertama sebagai 1. Mari kita periksa
Operasi AND dengan 1 hanya akan menghasilkan 1 (1 dalam biner juga akan memiliki digit terakhir 1), jika nilainya ganjil.
Periksa halaman Operator Bitwise Python untuk lebih lanjut.
PS: Anda secara taktis dapat menggunakan metode ini jika Anda ingin memilih kolom ganjil dan genap dalam dataframe. Misalkan koordinat x dan y dari titik kunci wajah diberikan sebagai kolom x1, y1, x2, dll. Untuk menormalkan koordinat x dan y dengan nilai lebar dan tinggi setiap gambar, Anda cukup melakukan
Ini tidak sepenuhnya terkait dengan pertanyaan tetapi untuk ilmuwan data dan insinyur computer vision, metode ini dapat berguna.
Bersulang!
sumber
list_ = daftar (kisaran (9)) cetak (list_ [1 :: 2])
sumber