0

我有两个从两个不同的数据库表生成的 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

4 回答 4

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(",")]获取实际列表(一个简单的列表理解),然后使用您的一种方法(set 方法是最有效的,尽管如果您希望保留重复项和顺序,您将需要执行第二种方法,尽管您可以通过list2预先制作一组来检查成员资格来改进它)。

于 2012-12-19T23:11:09.593 回答
1
def compare(list1,list2):
ln= []
for i in list1:
    if i  in list2:
       ln.append(i)
return ln

打印(比较(list1,list2))

不优化但易于理解。

于 2012-12-20T13:33:44.937 回答
1

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

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

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

common = filter(lambda x:x in list1,list2)
于 2012-12-19T23:11:53.463 回答
1

他们应该是这样的:

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','', '', '']

修复它们后,您的代码可以工作。

于 2012-12-19T23:13:34.900 回答