Самый быстрый способ удалить дубликаты в списках Python

Если я понимаю Вас правильно, это кажется, что Вы ожидаете, что MathContext будет управлять, сколько цифр должно быть сохранено после десятичной точки. Это не то, для чего это. Это определяет сколько цифр для хранения, общее количество . Таким образом, если Вы определяете желание 3 значащих цифр это - все, что Вы собираетесь получить.

, Например, это:

System.out.println(new BigDecimal("1234567890.123456789",
                   new MathContext(20)));

System.out.println(new BigDecimal("1234567890.123456789",
                   new MathContext(10)));

System.out.println(new BigDecimal("1234567890.123456789",
                   new MathContext(5)));

произведет:

1234567890.123456789
1234567890
1.2346E+9
12
задан Cookies 4 November 2009 в 17:17
поделиться

4 ответа

Это самый быстрый способ, который я могу придумать:

import itertools
output_list = list(set(itertools.chain(first_list, second_list)))

Небольшое обновление: как указывает jcd , в зависимости от вашего приложения вам, вероятно, не нужно преобразовывать результат обратно в список. Поскольку набор является итеративным сам по себе, вы можете просто использовать его напрямую:

output_set = set(itertools.chain(first_list, second_list))
for item in output_set:
    # do something

Остерегайтесь, однако, что любое решение, включающее использование set () , вероятно, изменит порядок элементов в вашем списке, поэтому нет гарантии, что элементы будут в каком-либо определенном порядке. Тем не менее, поскольку вы объединяете два списка, трудно придумать вескую причину, по которой вам в любом случае потребуется определенное упорядочение по ним, так что, вероятно, вам не стоит беспокоиться об этом.

20
ответ дан 2 December 2019 в 03:38
поделиться
result = list(set(list1).union(set(list2)))

Вот как я бы это сделал. Хотя я не уверен в производительности, но это определенно лучше, чем делать это вручную.

3
ответ дан 2 December 2019 в 03:38
поделиться

Я бы рекомендовал что-то вроде этого:

def combine_lists(list1, list2):
    s = set(list1)
    s.update(list2)
    return list(s)

Это устраняет проблему создания чудовищного списка конкатенации первых двух.

В зависимости от того, что вы делаете с выводом, не беспокойтесь о преобразовании обратно в список. Если порядок важен, вам могут понадобиться какие-то махинации по украшению / сортировке / недекорированию.

11
ответ дан 2 December 2019 в 03:38
поделиться

Как заявляет Дэниел, набор не может содержать повторяющиеся записи, поэтому объедините списки:

list1 + list2

Затем преобразуйте новый список в набор:

set(list1 + list2)

Затем обратно в список:

list(set(list1 + list2))
7
ответ дан 2 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

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