gpt4 book ai didi

python - 检测到 2 个字符串相同但顺序不同

转载 作者:行者123 更新时间:2023-11-28 22:24:02 26 4
gpt4 key购买 nike

我的目标是检测 2 个字符串是否相同但顺序不同。

Example
"hello world my name is foobar" is the same as "my name is foobar world hello"

我已经尝试过将两个字符串拆分为列表并在循环中进行比较。

text = "hello world my name is foobar"
textSplit = text.split()

pattern = "foobar is my name world hello"
pattern = pattern.split()

count = 0
for substring in pattern:
if substring in textSplit:
count += 1

if (count == len(pattern)):
print ("same string detected")

它返回了我想要的,但这实际上是正确且有效的方法吗?也许还有另一种方法。任何关于该主题的期刊建议都非常好。

编辑 1:重复的词很重要

text = "fish the fish the fish fish fish"
pattern = "the fish"

它必须返回 false

最佳答案

如果你想检查 2 个句子是否有相同的单词(出现次数相同),你可以将句子分成单词并排序:

>>> sorted("hello world my name is foobar".split())
['foobar', 'hello', 'is', 'my', 'name', 'world']
>>> sorted("my name is foobar world hello".split())
['foobar', 'hello', 'is', 'my', 'name', 'world']

您可以在函数中定义检查:

def have_same_words(sentence1, sentence2):
return sorted(sentence1.split()) == sorted(sentence2.split())

print(have_same_words("hello world my name is foobar", "my name is foobar world hello"))
# True

print(have_same_words("hello world my name is foobar", "my name is foobar world hello"))
# True

print(have_same_words("hello", "hello hello"))
# False

print(have_same_words("hello", "holle"))
# False

如果大小写不重要,你可以比较小写的句子:

def have_same_words(sentence1, sentence2):
return sorted(sentence1.lower().split()) == sorted(sentence2.lower().split())

print(have_same_words("Hello world", "World hello"))
# True

注意:您也可以使用 collections.Counter 而不是 sorted。复杂度将是 O(n) 而不是 O(n.log(n)),这无论如何都没有太大区别。 import collections 可能比排序字符串花费更长的时间:

from collections import Counter

def have_same_words(sentence1, sentence2):
return Counter(sentence1.lower().split()) == Counter(sentence2.lower().split())

print(have_same_words("Hello world", "World hello"))
# True

print(have_same_words("hello world my name is foobar", "my name is foobar world hello"))
# True

print(have_same_words("hello", "hello hello"))
# False

print(have_same_words("hello", "holle"))
# False

关于python - 检测到 2 个字符串相同但顺序不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46703877/

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