Fazendo loop em uma lista em Python

177

Eu tenho uma lista com sublistas. Quero imprimir todas as sublistas com comprimento igual a 3.

Estou fazendo o seguinte em python:

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

valuesé a lista original. O código acima imprime todas as sub-listas com comprimento igual a 3 para cada valor de x? Quero exibir as sublistas onde length == 3apenas uma vez.

O problema está resolvido. O problema está no editor Eclipse. Não entendo o motivo, mas ele está exibindo apenas metade da minha lista quando executo meu loop.

Há alguma configuração que precise alterar no Eclipse?

user1188821
fonte
1
Você poderia fazer print valuese mostrar a saída aqui? editar: ou apenas verifique se não está em branco.
Brigand
1
Melhor resposta: stackoverflow.com/a/28072982/4561887
Gabriel Staples

Respostas:

196

Tente isso,

x in mylisté melhor e mais legível do que x in mylist[:]e o seu len(x)deve ser igual 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]

ou se você precisar de mais compreensão de listas de uso pítônico

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

Você também pode usar for x in valuese não for x in values[:]; o último faz uma cópia desnecessária. Além disso, é claro que o código verifica um comprimento de 2 em vez de 3 ...

O código imprime apenas um item por valor de x- e xestá iterando sobre os elementos de values, que são as sublistas. Portanto, ele imprimirá cada sub-lista apenas uma vez.

comex
fonte
4
values ​​[:] corta todos os elementos dos valores, certo? Suponho que você quis dizer a lista temporária criada a partir da fatia. Só quero ter certeza.
batbrat
1
Obrigado por mencionar a cópia indesejada. @batbrat ele não corta fora, ele corta fora, o que quero dizer é que os valores são duplicados, e ainda em values.
Aster
Obrigado por esclarecer.
batbrat
14

Aqui está a solução que eu estava procurando. Se você deseja criar a Lista2 que contém a diferença dos elementos numéricos na Lista1.

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)

Observe que while len(list1)é 11 (elementos), len(list2)serão apenas 10 elementos porque estamos iniciando nosso loop for do elemento com índice 1 na lista1 e não do elemento com índice 0 na lista1

Kean Amaral
fonte
Isso era exatamente o que eu precisava, pois precisava começar do índice 1 e não 0. +1
timv 20/03/19
1

Faça isso:

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