2 回答

TA貢獻1854條經驗 獲得超8個贊
這是沒有 SequenceMatcher 方法的情況。如果所有字符串都遵循相同的模式,您可以將它們分成空格上的單詞。
strings_list = ['PS1 123456 Test', 'PS1 758922 Test', 'PS1 978242 Test']
test = []
for string in strings_list:
? print(string.split())
? test.append(string.split())
>>> ['PS1', '123456', 'Test']
['PS1', '758922', 'Test']
['PS1', '978242', 'Test']
現在您可以簡單地進行集合交集來查找公共元素。
set(test[0]).intersection(*test[1:])
>>> {'PS1', 'Test'}
# join them to get string
' '.join(set(test[0]).intersection(*test[1:]))
>>> PS1 Test
只有當它們遵循這種由空格分隔的模式時,這才有效。
功能:
def findCommonStr(strings_list: list) -> str:
? all_str = []
? for string in strings_list:
? ??
? ? all_str.append(string.split())
? return ' '.join(set(all_str[0]).intersection(*all_str[1:]))

TA貢獻1827條經驗 獲得超4個贊
您需要保留所有片段,而不僅僅是第一個片段:
def get_common_str(strs: List[str]) -> str:
common_str = strs[0] if strs else ''
for str_ in strs[1:]:
common_str = ''.join(
common_str[m.a:m.a + m.size]
for m in SequenceMatcher(None, common_str, str_).get_matching_blocks()
)
return common_str
print(get_common_str(['PS1 123456 Test', 'PS1 758922 Test', 'PS1 978242 Test']))
這使
PS1 2 Test
這個問題很棘手,所以這種啟發式可能并不總是有效,請隨意想出另一個!看起來 SequenceMatcher 在你的案例中做得很好。我們不僅得到了常見的單詞,還得到了單詞片段,令人印象深刻。
添加回答
舉報