Looping atas daftar dengan Python


177

Saya punya daftar dengan sublist di dalamnya. Saya ingin mencetak semua sublist dengan panjang sama dengan 3.

Saya melakukan hal berikut dengan python:

for x in values[:]:
    if len(x) == 3:
        print(x)

valuesadalah daftar asli. Apakah kode di atas mencetak setiap sublist dengan panjang sama dengan 3 untuk setiap nilai x? Saya ingin menampilkan sub daftar di mana length == 3hanya sekali.

Masalah terpecahkan. Masalahnya adalah dengan editor Eclipse. Saya tidak mengerti alasannya, tetapi hanya menampilkan setengah dari daftar saya ketika saya menjalankan loop saya.

Apakah ada pengaturan yang harus saya ubah di Eclipse?


1
Bisakah Anda melakukan print valuesdan menunjukkan hasilnya di sini? edit: atau cukup periksa bahwa itu tidak kosong.
Brigand

Jawaban:


196

Coba ini,

x in mylistlebih baik dan lebih mudah dibaca daripada x in mylist[:]dan Anda len(x)harus sama dengan 3.

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

atau jika Anda membutuhkan lebih banyak pythonic gunakan daftar-pemahaman

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

15

Anda sebaiknya menggunakan for x in valuesdaripada for x in values[:]; yang terakhir membuat salinan yang tidak perlu. Juga, tentu saja kode itu memeriksa untuk panjang 2 daripada 3 ...

Kode hanya mencetak satu item per nilai x- dan xmengulangi elemen-elemen dari values, yang merupakan sublists. Jadi hanya akan mencetak setiap sublist sekali.


4
nilai [:] memotong semua elemen nilai, kan? Saya berasumsi bahwa yang Anda maksud adalah daftar sementara yang dibuat dari slicing. Hanya ingin memastikan.
batbrat

1
Terima kasih telah menyebutkan salinan yang tidak diinginkan. @batbrat itu tidak irisan keluar, irisan off, apa yang saya maksud adalah bahwa nilai-nilai yang digandakan, dan masih dalam values.
AsTeR

Terima kasih telah mengklarifikasi.
batbrat

14

Inilah solusi yang saya cari. Jika Anda ingin membuat List2 yang berisi perbedaan elemen angka di List1.

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

Perhatikan bahwa sementara len(list1)adalah 11 (elemen), len(list2)hanya akan menjadi 10 elemen karena kita mulai untuk loop kita dari elemen dengan indeks 1 di list1 bukan dari elemen dengan indeks 0 di list1


Ini hanya apa yang saya butuhkan karena saya harus mulai dari indeks 1 bukan 0. +1
timv

1

Lakukan ini sebagai gantinya:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.