2017-01-25 66 views
-1

我使用Python並試圖比較列表之間的數據。名單A將有看起來像數據:最有效的方法來比較列表數據

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

和列表B將有看起來像數據:

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

我想,以確保聚集在列表中的數據A包含在清單B收集的數據中。通過使用嵌套for循環是唯一的方法嗎?我不想簡單地看看A中的項目是否在B的其中一項中,但我需要確保1:1的相關性。例如,列表B需要包含一個包含'perspectiveA'的項目,但只有一個項目。

+0

使用列表會迫使你在這裏效率低下。 –

+0

我還沒有嘗試過任何東西,但到目前爲止我的想法是我可以創建列表B中的項目的新列表,但由'。'剝離。直到最後一個元素,然後將兩個列表作爲集合進行比較,以確保它們是相同的。感覺就像是一種創可貼的解決方案。 –

回答

0

轉換兩個列表集:

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

爲什麼不動的元素在你的列表中的一個(名單A,因爲它聽起來像在列表中的數據是唯一的)到字典中,因爲通過搜索該數據類型要快得多,你可以有保留您的計數器,以及:

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以外的值要麼沒有現身或複製任何字典元素。

相關問題