Python 比较列表数据的最有效方法

Python 比较列表数据的最有效方法,python,arrays,list,set,compare,Python,Arrays,List,Set,Compare,我正在使用python并尝试比较列表之间的数据。列表A将包含如下数据: A=['perspectiveA','perspectiveB','perspectiveC'] 列表B将包含如下数据: B=['listB.data.perspectiveA','listB.data.perspectiveB','listB.data.perspectiveC'] 我试图确保在列表A中收集的数据包含在列表B中收集的数据中。使用嵌套for循环是否是实现此目的的唯一方法?我不想简单地查看A中的项目是否在B中的

我正在使用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需要包含一个包含“透视A”但只有一个项目的项目。

将两个列表转换为集合:

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

为什么不将其中一个列表(列表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的字典元素要么不显示,要么重复。

在这里使用列表将迫使您效率低下。我还没有尝试过任何东西,但到目前为止,我的想法是我可以用列表B中的项目创建一个新列表,但将“.”剥离到最后一个元素,然后将两个列表作为集合进行比较,以确保它们完全相同。只是觉得这是一个创可贴解决方案。