我有两个从两个不同的数据库表生成的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很常见。
答案 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','', '', '']
修复后,您的代码会正常运行。