0

2つの異なるデータベーステーブルから生成された2つの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',', '', '']

2つの共通の要素を見つける必要があります

set(list1) & set(list2) 

何も表示されません

何も[i for i in list1 if i in list2]表示されません。HZ1398043が一般的であることがはっきりとわかります。

4

4 に答える 4

8

よく見てください。最初のリストは、実際には1つのアイテム、大きな文字列を含むリストです。

>>> 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メソッドが最も効率的ですが、重複と順序を保持したい場合は、次のことを行う必要があります。 2番目の方法。ただしlist2、メンバーシップを確認するために事前にセットを作成することで改善できます)。

于 2012-12-19T23:11:09.593 に答える
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 に答える
1
def compare(list1,list2):
ln= []
for i in list1:
    if i  in list2:
       ln.append(i)
return ln

print(compare(list1、list2))

最適化されていませんが、理解しやすいです。

于 2012-12-20T13:33:44.937 に答える