我正在关注帖子在Python中有效地搜索字符串列表中的字符串列表并尝试在字符串列表中搜索子字符串列表。上面的帖子查找与字符串列表匹配的字符串列表的索引。在我的代码中,我对 L1 进行子字符串化并将其展平以匹配 L2 字符串。如何获取以 L2 字符串作为子字符串的所有 L1 字符串的列表?现在,我正在获取与每个 L2 字符串匹配的 L1 字符串列表的索引。
这就是我已经走了多远。我正在遵循的代码:
from bisect import bisect_left, bisect_right
from itertools import chain
L1=[["animal:cat","pet:dog","fruit:apple"],["fruit:orange","color:green","color:red","fruit:apple"]]
L2=["apple", "cat","red"]
M1 = [[i]*len(j) for i, j in enumerate(L1)]
M1 = list(chain(*M1))
L1flat = list(chain(*L1))
I = sorted(range(len(L1flat)), key=L1flat.__getitem__)
L1flat = sorted([L1flat[i].split(':')[1] for i in I])
print(L1flat)
M1 = [M1[i] for i in I]
for item in L2:
s = bisect_left(L1flat, item)
e = bisect_right(L1flat, item)
print(item, M1[s:e])
#print(L1flat[s:e])
sub = M1[s:e]
for y in sub:
print('%s found in %s' % (item, str(L1(y))))
编辑:我刚刚意识到我在搜索第二个和第三个项目时遇到错误。
3件事:
我通过枚举 L1 的分割元素创建了 M1
L1Splitted = [i[0].split(':')[1] for i in L1]
M1 = [[i]*len(j) for i, j in enumerate(L1Splitted)]
我反转了L1flat中的元素并拆分了元素
L1平反转 = []
对于 j,x 进行枚举(L1flat)
L1flatReversed.append(reverseString(x, ':'))
然后我制作了另一个反向字符串拆分列表
L1flatReversedSplit = [L1flatReversed[i].split(':')[0] for i in I]
现在我的 s 和 e 在 L1flatReversedSplit 上平分
3件事:
我通过枚举 L1 的分割元素创建了 M1
L1Splitted = [i[0].split(':')[1] for i in L1]
M1 = [[i]*len(j) for i, j in enumerate(L1Splitted)]
我反转了L1flat中的元素并拆分了元素
L1平反转 = []
对于 j,x 进行枚举(L1flat)
L1flatReversed.append(reverseString(x, ':'))
然后我制作了另一个反向字符串拆分列表
L1flatReversedSplit = [L1flatReversed[i].split(':')[0] for i in I]
现在我的 s 和 e 在 L1flatReversedSplit 上平分