Tengo algunas listas que estoy tratando de investigar. Estoy atascado en algún momento:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

Digamos que esta es la lista. Necesito aislar una nueva lista de la lista D. Podemos decir que quiero filtrar esos "1"; Pero no pude hacerlo.

Si uso el método de "índice" como:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

E = []

for i in D:
    if not i == 1:
        E.append(D.index(i))

print(E)

El resultado es: [3, 4, 10, 3]. Lo que necesito es [3, 4, 10, 11]. Dado que los valores están en D [3] y D [11] son los mismos, Python no me permite para obtener el segundo. ¿Cómo puedo resolver esto?

Su ayuda es muy apreciada.

Gracias.

1
Crusher Pyth 10 oct. 2019 a las 01:18

3 respuestas

La mejor respuesta

Puedes escribir este programa de muchas maneras. Primero intentaré adaptar su ejemplo con cambios mínimos:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]

E = []

for i in range(len(D)):
    if D[i] != 1:
        E.append(i)

print(E)

Sin embargo, también hay una solución de una línea más corta / simple:

D = [1, 1, 1, 2, 5, 1, 1, 1, 1, 1, 3, 2, 1, 1]
E = [i for i in range(len(D)) if D[i]!=1]
print(E)
1
NOhs 9 oct. 2019 a las 22:48

El uso de la función index de hecho siempre devuelve la primera ocurrencia. De la documentación:

list.index (x [, start [, end]])

Devuelve el índice basado en cero en la lista del primer elemento cuyo valor es igual a x. Provoca un ValueError si no existe dicho elemento.

...

Podemos usar comprensiones de listas y combinar esto con enumerate para obtener lo que desea:

[index for index, value in enumerate(D) if value != 1]
# [3, 4, 10, 11]
1
NOhs 9 oct. 2019 a las 22:52

Puede utilizar una comprensión de lista condicional para enumerar los valores en {{ X0}} y obtenga las ubicaciones de índice de esos valores que coinciden con su condición.

>>> [idx for idx, val in enumerate(D) if val != 1]
[3, 4, 10, 11]

Tenga en cuenta que también puede usar filter para crear un generador de los valores en esas ubicaciones de índice.

>>> list(filter(lambda val: val != 1, D))
[2, 5, 3, 2]
1
Alexander 9 oct. 2019 a las 22:30
58313011