gpt4 book ai didi

python - 找到两个字符串之间交集的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 15:42:32 27 4
gpt4 key购买 nike

我需要找到两个字符串之间的交集。断言:

assert intersect("test", "tes") == list("tes"), "Assertion 1"
assert intersect("test", "ta") == list("t"), "Assertion 2"
assert intersect("foo", "fo") == list("fo"), "Assertion 3"
assert intersect("foobar", "foo") == list("foo"), "Assertion 4"

我为 intersect 函数尝试了不同的实现。 intersect 将接收 2 个 str 参数,ww2


列表理解。迭代并查找第二个字符串中的匹配项。

return [l for l in w if l in w2]

失败断言 1 和 2,因为 w 中的多个 t 匹配 w2 中的一个 t


设置交叉点。

return list(set(w).intersection(w2)
return list(set(w) & set(w2))

失败断言 3 和 4,因为集合是唯一元素的集合,重复的字母将被丢弃。


迭代和计数。

out = ""
for c in s1:
if c in s2 and not c in out:
out += c
return out

失败,因为它也消除了重复项。


差异库 ( Python Documentation )

letters_diff = difflib.ndiff(word, non_wildcards_letters)
letters_intersection = []

for l in letters_diff:
letter_code, letter = l[:2], l[2:]
if letter_code == " ":
letters_intersection.append(letter)

return letters_intersection

通过


difflib 有效,但有人能想到更好的优化方法吗?

编辑:该函数将返回一个字符列表。顺序并不重要。

最佳答案

试试这个:

def intersect(string1, string2): 
common = []
for char in set(string1):
common.extend(char * min(string1.count(char), string2.count(char)))

return common

注意:它不保留顺序(如果我没记错 set(),字母将按字母顺序返回)。但是,正如您在评论中所说,顺序无关紧要

关于python - 找到两个字符串之间交集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51748890/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com