Если я понимаю Вас правильно, это кажется, что Вы ожидаете, что 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
Это самый быстрый способ, который я могу придумать:
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 ()
, вероятно, изменит порядок элементов в вашем списке, поэтому нет гарантии, что элементы будут в каком-либо определенном порядке. Тем не менее, поскольку вы объединяете два списка, трудно придумать вескую причину, по которой вам в любом случае потребуется определенное упорядочение по ним, так что, вероятно, вам не стоит беспокоиться об этом.
result = list(set(list1).union(set(list2)))
Вот как я бы это сделал. Хотя я не уверен в производительности, но это определенно лучше, чем делать это вручную.
Я бы рекомендовал что-то вроде этого:
def combine_lists(list1, list2):
s = set(list1)
s.update(list2)
return list(s)
Это устраняет проблему создания чудовищного списка конкатенации первых двух.
В зависимости от того, что вы делаете с выводом, не беспокойтесь о преобразовании обратно в список. Если порядок важен, вам могут понадобиться какие-то махинации по украшению / сортировке / недекорированию.
Как заявляет Дэниел, набор не может содержать повторяющиеся записи, поэтому объедините списки:
list1 + list2
Затем преобразуйте новый список в набор:
set(list1 + list2)
Затем обратно в список:
list(set(list1 + list2))