Python'da bir liste üzerinde döngü


177

İçinde alt listelerin bulunduğu bir listem var. 3'e eşit uzunlukta tüm alt listeleri yazdırmak istiyorum.

Python aşağıdaki yapıyorum:

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

valuesorijinal listedir. Yukarıdaki kod, her bir alt listeyi her değeri için 3'e eşit uzunlukta yazdırıyor xmu? Alt listeleri length == 3yalnızca bir kez görüntülemek istiyorum .

Problem çözüldü. Sorun Eclipse editöründe. Sebebini anlamıyorum, ancak döngümü çalıştırdığımda listemin sadece yarısını gösteriyor.

Eclipse'de değiştirmek zorunda olduğum herhangi bir ayar var mı?


1
print valuesÇıktıyı burada gösterebilir misiniz ? düzenleme: ya da boş olmadığını kontrol edin.
Brigand

Yanıtlar:


196

Bunu dene,

x in mylistdaha iyi ve daha okunabilir x in mylist[:]ve len(x)eşit olmalıdır 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]

veya daha fazla pythonic kullanmanız gerekiyorsa liste anlama

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

15

Kullanmak for x in valuesyerine kullanabilirsinizfor x in values[:] ; ikincisi gereksiz bir kopya oluşturur. Ayrıca, elbette bu kod 3 yerine 2 uzunluğunu kontrol eder ...

Kod x- değeri başına yalnızca bir öğe yazdırır ve alt listeler olan xöğelerinin üzerinde valuesyinelenir. Böylece her alt listeyi yalnızca bir kez basar.


4
değerleri [:] değerlerin tüm öğelerini dilimler, değil mi? Dilimlemeden oluşturulan geçici listeyi kastettiğini varsayıyorum. Sadece emin olmak istiyorum.
batbrat

1
İstenmeyen kopyadan bahsettiğiniz için teşekkür ederiz. @batbrat dilimlenmez, dilimler, değerlerin çoğaltılması ve hala içeri girmesi anlamına gelir values.
AsTeR

Açıkladığınız için teşekkürler.
batbrat

14

İşte aradığım çözüm. List1'deki sayı öğelerinin farkını içeren List2 oluşturmak istiyorsanız.

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)

len(list1)11 (element) iken , len(list2)sadece 10 eleman olacağına dikkat edin, çünkü bizim for döngüsünü list1 dizin 1 öğesinden, list1 dizin 0 öğesinden değil


İndeks 1'den 0'a başlamak için ihtiyacım olan şey
buydu.

1

Bunun yerine şunu yapın:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.