2016-03-03 76 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] 

如何写?

编辑 我想使用一种使用列表解析的方式。

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] + [ ([1,2,4,3] + [5,6,7,8,9])) – PyNEwbie

+0

修复它..感谢 –