Перебираючи список у Python


177

У мене є список із списками. Я хочу надрукувати всі підлісти довжиною, що дорівнює 3.

Я роблю наступне в python:

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

valuesє оригінальним списком. Чи надрукується вищевказаний код для кожного підспису довжиною, рівною 3 для кожного значення x? Я хочу відобразити списки там, де length == 3лише один раз.

Проблема вирішена. Проблема полягає в редакторі Eclipse. Я не розумію причини, але вона відображає лише половину мого списку, коли я запускаю цикл.

Чи є якісь параметри, які я повинен змінити в Eclipse?


1
Не могли б ви тут print valuesі показати результат? редагувати: або просто перевірте, чи не пусто.
Бриганд

Відповіді:


196

Спробуйте це,

x in mylistкраще і читабельніше, ніж x in mylist[:]і вашому len(x)має бути дорівнює 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]

або якщо вам потрібно більше пітонічного використання списків- розумінь

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

15

Ви також можете використовувати, for x in valuesа не використовувати for x in values[:]; останній робить непотрібну копію. Крім того, звичайно, що код перевіряє довжину 2, а не 3 ...

Код друкує лише один елемент на значення x- і xповторюється над елементами values, які є підсписками. Таким чином, він надрукує кожен підпис із одного разу.


4
Значення [:] вирізає всі елементи значень, правда? Я припускаю, що ви мали на увазі тимчасовий список, створений від нарізки. Просто хочу переконатися.
батбрат

1
Дякуємо, що згадали про небажану копію. @batbrat він не зрізає, він зрізає, що я маю на увазі, що значення дублюються і все ще є values.
AsTeR

Дякуємо за уточнення.
батбрат

14

Ось рішення, яке я шукав. Якщо ви хочете створити List2, який містить різницю елементів числа в 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)

Зауважте, що поки len(list1) 11 (елементів), len(list2)буде лише 10 елементів, тому що ми починаємо цикл з елемента з індексом 1 у списку1, а не з елемента з індексом 0 у списку1


Це було саме те, що мені потрібно було, щоб почати з індексу 1, а не 0. +1
timv

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.