Es возможный autorreferenciar una lista por comprensión (una тратта línea) en параграф Python eliminar elementos repetidos

Python Eliminar los elementos repetidos en una lista es возможный mediante el siguiente algoritmo:

my_list = [ 5, 3, 7, 3, 5, 5, 5, 2, 5, 7, 7, 3 ]

new_list = []

for element in my_list:
    if element not in new_list:
        new_list.append(element)

print new_list # produce [5, 3, 7, 2]

Эмбарго греха, cuando предварительный Тендо realizar алгоритм подобный en una lista por comprensión el algoritmo sólo funciona (исходный produciendo la lista) si se redunda en la declaración de la lista "recipiente".

my_list = [ 5, 3, 7, 3, 5, 5, 5, 2, 5, 7, 7, 3 ]

#new_list = [] #produce la lista original si se incluye esta linea 

new_list = [ element for element in my_list if element not in new_list ]

print new_list

Танто Por, ми pregunta es СИ es возможный сер autorreferenciar una lista por comprensión en python para eliminar elementos repetidos que pueda expresada en una sola línea.

Lo más приблизительно que он podido realizar es lo siguiente:

my_list = [ 5, 3, 7, 3, 5, 5, 5, 2, 5, 7, 7, 3 ]

my_list.sort()

n = len(my_list)

new_list = [ my_list[i] for i in range(n) if my_list[i-1] != my_list[i] ]

if n >= 1 and len(new_list) == 0:
    new_list = [ my_list[0] ] #para capturar excepciones de listas como [1]
                              #o [ 1, 1, 1, 1, 1 ]

print new_list

Эмбарго греха, requiere que la lista de origen esté ordenada y considerar las posibles excepciones (ver código предшествующий).

Nota de Edición:

La línea siguiente también funciona:

new_list = [ my_list[i] for i in range(len(my_list)) if my_list[i] not in my_list[:i] ]
1
задан 18.01.2017, 13:34
0 ответов

Если для тебя не имеет значение порядок, самое легкое состоит в том, чтобы использовать set. set - коллекция без команды, которая не позволяет повторенные, тогда, podés делать

new_list = list(set(my_list))

Если для тебя имеет значение порядок, тогда podés использовать enumerate чтобы иметь индекс, который он позволял бы тебе повторять в ранге my_list что уже был обработан

new_list = [x[1] for x in enumerate(my_list) if x[1] not in my_list[:x[0]]]
3
ответ дан 03.12.2019, 17:40
  • 1
    có я говорю с enumerate dejarí в лучше así: new_list = [x for (i, x) in перечисли тебя (my_list) if x not in my_list [: i]] –  23.01.2017, 22:10

Из-за того, что ты бы это упростил немного, ты мог бы создавать раньше список заблаговременно и наполнять ее в list comprehension без необходимости использовать индексы или индексации:

vieja = [1,8,3,4,5,6,7,8,8,7,6,3,2]
nueva = []
[nueva.append(val) for val in vieja if val not in nueva]
2
ответ дан 03.12.2019, 17:40

Теги

Похожие вопросы