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?


1
Você poderia fazer print valuese mostrar a saída aqui? editar: ou apenas verifique se não está em branco.
Brigand

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]]
>>>

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.


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


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)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.