Een lijst in Python doorlopen

Ik heb een lijst met sublijsten erin. Ik wil alle sublijsten afdrukken met een lengte gelijk aan 3.

Ik doe het volgende in python:

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

valuesis de originele lijst. Drukt de bovenstaande code elke sublijst af met een lengte gelijk aan 3 voor elke waarde van x? Ik wil de sublijsten waar length == 3slechts één keer weergeven.

Het probleem is opgelost. Het probleem zit in de Eclipse-editor. Ik begrijp de reden niet, maar het toont slechts de helft van mijn lijst wanneer ik mijn loop laat lopen.

Zijn er instellingen die ik moet wijzigen in Eclipse?


Antwoord 1, autoriteit 100%

x in mylistis beter en leesbaarder dan x in mylist[:]en uw len(x)moet gelijk zijn aan 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]

of als je meer pythonisch gebruik nodig hebt list-comprehensions

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

Antwoord 2, autoriteit 8%

Je kunt net zo goed for x in valuesgebruiken in plaats van for x in values[:]; de laatste maakt een onnodige kopie. Ook controleert die code natuurlijk op een lengte van 2 in plaats van 3…

De code drukt alleen één item per waarde af van x– en xis iteratie over de elementen van values, die de sublijst zijn. Dus het zal elke sublijst slechts één keer afdrukken.


Antwoord 3, Autoriteit 8%

Hier is de oplossing waar ik naar op zoek was. Als u LUG2 wilt maken die het verschil van de nummerelementen in LIST1 bevat.

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)

Merk op dat terwijl len(list1)11 (elementen) is, len(list2)slechts 10 elementen zijn omdat we onze voor lus van element met index beginnen 1 in lijst1 Niet van element met index 0 in lijst1


Antwoord 4

doe dit in plaats daarvan:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)

Other episodes