2017-01-25 28 views
-1

私はpythonを使用していて、リスト間のデータを比較しようとしています。私は、データがリストに集まっていることを確認しようとしているリストのデータを比較する最も効率的な方法

B=['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC']

A=['perspectiveA', 'perspectiveB', 'perspectiveC']

そしてリストBのように見えるというデータがあります:リストAは次のようになり、データがありますリストBに集められたデータには、Aが含まれています。ネストされたforループを使用してこれを行う唯一の方法はありますか? Aの商品がBの商品に含まれているかどうかはわかりませんが、1:1の相関関係があることを確認する必要があります。たとえば、リストBには、には 'perspectiveA'が含まれている項目が1つのみ含まれている必要があります。

+0

リストを使用すると、ここでは効率が悪くなります。 –

+0

私はまだ何も試していないが、これまでの考えではリストBの項目の中から新しいリストを作成できるが、 '。'最後の要素まで降りてから、両方のリストをセットとして比較して、それらが同一であることを確認します。それはちょうどそのようなバンドの援助のソリューションのように感じる。 –

答えて

0

セットに両方のリストを変換します(そのリスト内のデータが一意であるように聞こえるので、リストA、)

set('listB.data.' + x for x in A) == set(B) 
# True 
0

を検索するので、辞書にあなたのリストの1の要素を移動しないのはなぜそのデータ型は、はるかに高速です、あなたはそこにもあなたのカウンタを保持することができます

listA = ['perspectiveA', 'perspectiveB', 'perspectiveC'] 
listB = ['listB.data.perspectiveA', 'listB.data.perspectiveB', 'listB.data.perspectiveC'] 
dictA = {a:0 for a in listA} 

>>> dictA 
{'perspectiveA': 0, 'perspectiveB': 0, 'perspectiveC': 0} 

for b in listB: 
    value = b.split(".")[2] 
    if value in dictA: 
     dictA[value] += 1 

1以外の値を持つ任意の辞書の要素が無ショーや重複のどちらかではありません。

関連する問題