2012-12-19 23 views
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',', '', ''] 

產生兩個Python列表,我需要找到兩個

set(list1) & set(list2) 

之間的共同元素不顯示任何內容

甚至[i for i in list1 if i in list2]不顯示任何內容。我清楚地看到HZ1398043很常見。

回答

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來檢查成員資格來改善它)。

+0

哦yaa ..我如何將它們拆分成多個項目 – Ank

+0

我在編輯問題,並開始知道list1實際上包含單個元素及其字符串的答案。我很快回來了,你已經指出:) –

+0

@Ankur看我的編輯。 –

0

首先,你需要作出適當的名單出來列表1中,這可以像做:

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

那麼你的代碼應該只是罰款。 另一種(更緊湊,但更慢)的方式來找到共同的元素是:

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

o_O不太清楚這個答案有什麼問題...... thx我的意見。 – jojo

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

你的代碼的工作,你修復後他們。

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

打印(比較(列表1,列表2))

不優化,但很容易理解。