两个列表中的常见元素python

时间:2012-12-19 23:09:34

标签: python list

我有两个从两个不同的数据库表生成的python列表

list1= ["'HZ1398043','HZ1395693','HZ1395532','HZ1395240','HZ1395194','HZ1395113','HZ1395036','HZ1395236','HZ1396139','HZ1398028','HZ1395098','HZ1395998','HZ1395018','HZ1395829','HZ1398031','HZ1395708','HZ1398029','HZ1398030','HZ1398054''"]

list2= ['', '', '', '', '', 'HZ1395018', 'HZ1395036', 'HZ1395098', 'HZ1395113', 'HZ1395194', 'HZ1395236', 'HZ1395240', 'HZ1395532', 'HZ1395693', 'HZ1395708', 'HZ1395829', 'HZ1395998', 'HZ1396139', 'HZ1398028', 'HZ1398029', 'HZ1398031', 'HZ1398043', 'HZ1397932', 'HZ1397949', 'HZ1398004', 'HZ1398021', 'HZ1398030', 'HZ1397940', 'HZ1397941', 'HZ1398010',', '', '']

我需要找到两者之间的共同元素

set(list1) & set(list2) 

不显示任何内容

[i for i in list1 if i in list2]不会显示任何内容。我可以清楚地看到HZ1398043很常见。

4 个答案:

答案 0 :(得分:8)

仔细观察,您的第一个列表实际上是一个包含一个项目的列表,一个大字符串。

>>> list1= ["'HZ1398043','HZ1395693','HZ1395532','HZ1395240','HZ1395194','HZ1395113','HZ1395036','HZ1395236','HZ1396139','HZ1398028','HZ1395098','HZ1395998','HZ1395018','HZ1395829','HZ1398031','HZ1395708','HZ1398029','HZ1398030','HZ1398054''"]
>>> len(list1)
1

理想情况下,修复获取数据的地方,如果不可能,则需要解析数据。

您需要执行类似list1 = [item.strip("'") for item in list1[0].split(",")]的操作来获取实际列表(简单list comprehension),然后使用您的一种方法(set方法效率最高,但如果您希望保留重复和顺序,您需要执行第二种方法,尽管您可以通过事先设置一组list2来检查其成员资格来改进它。)

答案 1 :(得分:1)

def compare(list1,list2):
ln= []
for i in list1:
    if i  in list2:
       ln.append(i)
return ln

打印(比较(list1,list2))

不优化但易于理解。

答案 2 :(得分:0)

首先,您需要从list1中创建一个正确的列表,这可以通过以下方式完成:

list1 = [item.strip("'") for item in list1[0].split(",")]

那么你的代码应该可以正常工作。 寻找共同元素的另一种(更紧凑但更慢)的方法是:

common = filter(lambda x:x in list1,list2)

答案 3 :(得分:0)

这是他们应该

list1= ['HZ1398043','HZ1395693','HZ1395532','HZ1395240','HZ1395194','HZ1395113','HZ1395036','HZ1395236','HZ1396139','HZ1398028','HZ1395098','HZ1395998','HZ1395018','HZ1395829','HZ1398031','HZ1395708','HZ1398029','HZ1398030','HZ1398054']
list2= ['', '', '', '', '', 'HZ1395018', 'HZ1395036', 'HZ1395098', 'HZ1395113', 'HZ1395194', 'HZ1395236', 'HZ1395240', 'HZ1395532', 'HZ1395693', 'HZ1395708', 'HZ1395829', 'HZ1395998', 'HZ1396139', 'HZ1398028', 'HZ1398029', 'HZ1398031', 'HZ1398043', 'HZ1397932', 'HZ1397949', 'HZ1398004', 'HZ1398021', 'HZ1398030', 'HZ1397940', 'HZ1397941', 'HZ1398010','', '', '']

修复后,您的代码会正常运行。