Ripassa ciclicamente un elenco in Python


177

Ho un elenco con elenchi secondari. Voglio stampare tutte le liste secondarie con lunghezza pari a 3.

Sto facendo quanto segue in Python:

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

valuesè l'elenco originale. Il codice sopra stampa ogni elenco secondario con lunghezza uguale a 3 per ogni valore di x? Voglio visualizzare le liste secondarie dove length == 3solo una volta.

Il problema è risolto. Il problema è con l'editor Eclipse. Non capisco il motivo, ma viene visualizzato solo metà dell'elenco quando eseguo il ciclo.

Ci sono delle impostazioni che devo modificare in Eclipse?


1
Potresti fare print valuese mostrare l'output qui? modifica: o controlla semplicemente che non sia vuoto.
Brigand,

Risposte:


196

Prova questo,

x in mylistè migliore e più leggibile di x in mylist[:]e len(x)dovresti essere uguale a 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]

o se hai bisogno di più comprensione dell'elenco di utilizzo pitone

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

15

Puoi anche usare for x in valuespiuttosto che for x in values[:]; quest'ultimo fa una copia non necessaria. Inoltre, ovviamente quel codice controlla per una lunghezza di 2 anziché di 3 ...

Il codice stampa solo un elemento per valore di x- e xsta ripetendo gli elementi di values, che sono le liste secondarie. Quindi stamperà ogni sottoelenco solo una volta.


4
valori [:] suddivide tutti gli elementi dei valori, giusto? Presumo che tu intendessi l'elenco temporaneo creato dalla divisione. Voglio solo essere sicuro.
Batbrat,

1
Grazie per aver menzionato la copia indesiderata. @batbrat non si suddivide, si suddivide, ciò che intendo è che i valori sono duplicati e ancora presenti values.
AsTeR,

Grazie per il chiarimento.
Batbrat,

14

Ecco la soluzione che stavo cercando. Se si desidera creare List2 che contiene la differenza degli elementi numerici in 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)

Nota che while len(list1)è 11 (elementi), len(list2)saranno solo 10 elementi perché stiamo iniziando il nostro ciclo for dall'elemento con indice 1 in elenco1 non dall'elemento con indice 0 in elenco1


Questo era proprio quello di cui avevo bisogno in quanto avevo bisogno di partire dall'indice 1 non 0. +1
timv

1

Fallo invece:

values = [[1,2,3],[4,5]]
for x in values:
    if len(x) == 3:
       print(x)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.