在python中查找两个字符串列表的交集

Sha*_*dra 6 python string intersection list set

我已经通过查找两个列表的交集?的两个列表字符串路口获取两个列表的交集的蟒蛇。但是,我无法解决使用 Python 查找两个字符串列表之间的交集的问题。

我有两个变量。

A = [['11@N3'], ['23@N0'], ['62@N0'], ['99@N0'], ['47@N7']]

B  = [['23@N0'], ['12@N1']]
Run Code Online (Sandbox Code Playgroud)

如何找到 '23@N0' 是 A 和 B 的一部分?

我尝试使用http://www.saltycrane.com/blog/2008/01/how-to-find-intersection-and-union-of/ 中提到的 intersect(a,b) 但是,当我尝试转换 A进入集合,它抛出一个错误:

File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
Run Code Online (Sandbox Code Playgroud)

要将其转换为集合,我使用了TypeError: unhashable type: 'list' when using built-in set function中的方法,其中列表可以使用转换

result = sorted(set(map(tuple, A)), reverse=True)
Run Code Online (Sandbox Code Playgroud)

成元组,然后元组可以转换成一个集合。但是,这会返回一个空集作为交集。

你能帮我找到路口吗?

Anu*_*rma 5

您可以使用模块的flatten功能compiler.ast来展平您的子列表,然后像这样应用集合交集

from compiler.ast import flatten

A=[['11@N3'], ['23@N0'], ['62@N0'], ['99@N0'], ['47@N7']]
B=[['23@N0'], ['12@N1']]

a = flatten(A)
b = flatten(B)
common_elements = list(set(a).intersection(set(b)))
common_elements
['23@N0']
Run Code Online (Sandbox Code Playgroud)

  • compiler.ast 仅适用于 python 2;建议使用 itertools.chain (4认同)