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?

pengguna1188821
sumber
1
Bisakah Anda melakukan print valuesdan menunjukkan hasilnya di sini? edit: atau cukup periksa bahwa itu tidak kosong.
Brigand
1
Jawaban terbaik: stackoverflow.com/a/28072982/4561887
Gabriel Staples

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]]
>>>
RanRag
sumber
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.

camex
sumber
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

Kean Amaral
sumber
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)
Aaditya Shah
sumber