2016-03-03 2 views
2

Мой кодСравнение двух списков и добывающие элементы

with open('freq1.txt') as f: 
    next(f, None) 
    list1 = [line.rstrip() for line in f] 

with open('freq2.txt') as f: 
    next(f, None) 
    list2 = [line.rstrip() for line in f] 

print set(list1).intersection(list2) 

Но я получил набор ([]) Например, у меня есть два списка

list1=[1,2,3,4] 
list2=[3,2,7,5,9] 

Я хочу, чтобы список всех элементов из list1 и list2

newlist=[1,2,3,4,5,7,9] 

Как это написать?

EDIT Я хотел бы использовать один способ используя список соображений.

list1=[1.0,2.0,3.1,4.2] 
list2=[3.0,2.0,7.2,5.1,9.2] 
list3=[2.1,4.2,5.1,9.2] 

su1 = list1 + [x for x in list2 if x not in list1] 
su2= su1 + [x for x in list3 if x not in su1] 
su2=sorted(su2) 
print su2list1=[1.0,2.0,3.1,4.2] 
list2=[3.0,2.0,7.2,5.1,9.2] 
list3=[2.1,4.2,5.1,9.2] 

su1 = list1 + [x for x in list2 if x not in list1] 
su2= su1 + [x for x in list3 if x not in su1] 
su2=sorted(su2) 
print su2 

Работы очень хорошие

[1.0, 2.0, 2.1, 3.0, 3.1, 4.2, 5.1, 7.2, 9.2] 
+0

ли порядок материи? –

+0

@GarrettR Да, последнее у меня будет больше списков. –

+0

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

ответ

5

Вы хотите set.union():

>>> set(list1).union(list2) 
set([1, 2, 3, 4, 5, 7, 9]) 

Если вы хотите получить список в качестве результата (который не является необходимым, если вы не хотите использовать такие как индексирование и , если вы имеете дело только с целыми числами, потому что, поскольку хэш целых чисел равен им самим (кроме -1, который равен -2), set() объект также сохранит заказ), вы можете вызвать функцию list() по результату union().

>>> list(set(list1).union(list2)) 
+0

Я не совсем уверен, но считаю, что наборы являются неупорядоченными контейнерами. Порядок зависит от хэша - пользователь не имеет контроля над порядком, поэтому, если входы меняются от реалов или целых чисел, упорядоченный вывод будет отличаться от ожидаемого. Я только упоминаю об этом, потому что вы делаете действительно сильное утверждение выше, которое не выполняется для многих случаев. – PyNEwbie

+0

@PyNEwbie Да, я только что упомянул, что это для целых чисел. – Kasramvd

+0

@ Kasramvd В моем случае у меня есть не целые числа. –

1

Если вы хотите, чтобы элементы отсортированы в порядке возрастания

sorted_unique = sorted(set(list1+list2)) 
+0

См. Мой комментарий выше, это не выполняется для всех случаев, сортировка списка перед преобразованием в набор кажется шумной, а также ненужной, если вход в целое, которое установлено (отсортировано ([1,2,3,4] + [ 5,6,7,8,9])) дает тот же результат, что и установленный (отсортированный ([1,2,4,3] + [5,6,7,8,9])) – PyNEwbie

+0

исправил его. –

Смежные вопросы