2012-02-04 18 views
61

Ho una lista con sottoliste in esso. Voglio stampare tutte le liste parziali con lunghezza pari a 3.In loop su un elenco in Python

sto facendo quanto segue in pitone:

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

'valori' è l'elenco originale. Il codice precedente stampa tutto il sottolista con lunghezza pari a 3 per ogni valore di x? Voglio visualizzare le sottoliste dove length==3 una sola volta.

il problema è risolto. il problema è con l'editor di Eclipse. non capisco la ragione, ma sta visualizzando solo la metà della mia lista quando eseguo il mio ciclo.

ci sono delle impostazioni che devo cambiare in eclissi?

+2

Perché fai a confrontare la lunghezza con 2 nel codice allora ?! – kennytm

+0

Potresti fare 'stampa valori' e mostrare l'output qui? * modifica: * o semplicemente controlla che non sia vuoto. – FakeRainBrigand

risposta

5

È inoltre possibile utilizzare for x in values anziché for x in values[:]; quest'ultimo fa una copia non necessaria. Inoltre, naturalmente che i controlli di codice per una lunghezza di 2 anziché di 3 ...

Il codice stampa un solo elemento per valore di x - e x è l'iterazione sugli elementi di values, che sono le liste parziali. Quindi stamperà solo ciascuna sottolista una volta.

+4

valori [:] taglia tutti gli elementi di valori, giusto? Suppongo che tu intendessi l'elenco temporaneo creato dall'affettatura. Voglio solo essere sicuro. – batbrat

88

Prova questo,

x in mylist è migliore e più leggibile rispetto x in mylist[:] e la vostra len(x) dovrebbe essere pari 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 avete bisogno di utilizzare in modo più divinatorio list-comprehensions

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