我有一个字符串列表和一个字符串列表。例如:
L1=[["cat","dog","apple"],["orange","green","red"]]
L2=["cat","red"]
如果 L1[i] 包含 L2 中的任何项目,我需要放置对(用于在图中创建边)
比如,在我的示例中,我需要对 ("cat","dog"),("cat,apple"),("red,orange"),("red","green")
我应该使用什么方法来使其最有效。 (我的列表 L1 很大)
最佳答案
假设您的 L1 子列表中可能有多个“控制”项。
我会使用 set()
来做到这一点和 itertools.product()
:
from itertools import product
def generate_edges(iterable, control):
edges = []
control_set = set(control)
for e in iterable:
e_set = set(e)
common = e_set & control_set
to_pair = e_set - common
edges.extend(product(to_pair, common))
return edges
例子:
>>> L1 = [["cat","dog","apple"],
... ["orange","green","red"],
... ["hand","cat","red"]]
>>> L2 = ["cat","red"]
>>> generate_edges(L1, L2)
[('apple', 'cat'),
('dog', 'cat'),
('orange', 'red'),
('green', 'red'),
('hand', 'red'),
('hand', 'cat')]
关于python - 有效地在字符串列表中搜索 python 中的字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9316970/