如果你想檢查2句具有相同的話(與相同數量的出現次數的),你可以在單詞的句子拆分,並比較str12的lenght對它們進行排序:
>>> 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
怎麼樣在哪裏重複單詞?是「魚」還是「魚魚魚魚」一樣呢? –
'sorted(text)== sorted(pattern)'maybe?它效率不高,但實施起來相當容易。 – ozgur
如果dups不重要,'len(set(text).difference(pattern))== 0' – Vinny