12

Получение уникальных значений из списка в Python

7

У меня есть задача, связанная с удалением дубликатов из списка. У меня есть следующий список:

['nowplaying', 'PBS', 'PBS', 'nowplaying', 'job', 'debate', 'thenandnow']

Мне нужно получить уникальные значения, и ожидаемый результат выглядит так:

['nowplaying', 'PBS', 'job', 'debate', 'thenandnow']

Я использую следующий код для достижения этой цели:

output = []
for x in trends:
    if x not in output:
        output.append(x)
print(output)

Этот код работает, но мне интересно, есть ли более эффективное решение для этой задачи? Буду признателен за советы и оптимизации!

5 ответ(ов)

4

Чтобы обеспечить согласованность с типом, я бы использовал следующий код:

mylist = list(set(mylist))

Этот подход преобразует ваш список в множество, удаляя дубликаты, а затем снова в список, что гарантирует, что вы получите уникальные элементы.

1

Чтобы получить уникальные элементы из списка в Python, вы можете преобразовать его в множество (set), которое автоматически удалит дублирующиеся значения. Если вам нужно вернуть результат обратно в список, вы можете сделать это, создав новый список из множества.

Вот пример:

>>> a = ['a', 'b', 'c', 'd', 'b']
>>> b = set(a)
>>> print(b)
{'b', 'c', 'd', 'a'}

Если вы хотите получить результат в виде списка, вы можете сделать так:

>>> unique_list = list(b)
>>> print(unique_list)

Обратите внимание, что элементы в множестве не упорядочены, поэтому порядок уникальных элементов в списке может отличаться от исходного списка.

0

Вопрос: Как эффективно удалить дубликаты из списка в Python, сохранив порядок?

Ответ: Вот несколько вариантов решения этой задачи:

  1. Медленный метод (сохраняет порядок, но медленно):
# Медленный способ - время выполнения: 14.417 секунд
[x for i, x in enumerate(array) if x not in array[0:i]]
  1. Быстрый метод (сохраняет порядок):
# Быстрый способ - время выполнения: 0.0378 секунд
[x for i, x in enumerate(array) if array.index(x) == i]
  1. Самый быстрый метод (сохраняет порядок):
# Самый быстрый способ - время выполнения: 0.012 секунд
uniq = []
[uniq.append(x) for x in array if x not in uniq]
uniq

Если порядок не имеет значения, есть еще более быстрый способ:

  1. Самый быстрый вариант (без сохранения порядка):
# Самый быстрый способ (порядок не важен) - время выполнения: 0.0035 секунд
list(set(array))

Надеюсь, это поможет вам выбрать подходящее решение в зависимости от ваших требований к производительности и порядку элементов!

0

set — это неупорядоченная коллекция уникальных элементов. Можно передать список элементов в конструктор set. Если передать список с дубликатами, мы получим set с уникальными элементами, а затем, преобразовав его обратно в список, снова получим список с уникальными элементами. Не могу ничего сказать о производительности и потреблении памяти, но, надеюсь, это не так важно для небольших списков.

list(set(my_not_unique_list))
0

Вы можете создать уникальный список элементов из исходного списка, сохраняя порядок, используя только списковое включение. Вот пример:

my_list = [1, 2, 1, 3, 2, 4, 3, 5, 4, 3, 2, 3, 1]
unique_list = [
    e
    for i, e in enumerate(my_list)
    if my_list.index(e) == i
]

Здесь enumerate возвращает индекс i и элемент e в виде кортежа. Выражение my_list.index(e) возвращает первый индекс элемента e. Если этот индекс не совпадает с i, значит, текущий элемент e не является первым в списке.

Примечание: Стоит отметить, что этот способ неэффективен с точки зрения производительности. Это просто один из способов достижения цели, используя только списковое включение.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь