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.