亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 SequenceMatcher 在多個字符串中查找公共片段

使用 SequenceMatcher 在多個字符串中查找公共片段

交互式愛情 2024-01-27 15:20:28
我想找到以下之間的公共字符串: strings_list = ['PS1 123456 Test', 'PS1 758922 Test', 'PS1 978242 Test']以下代碼僅返回第一部分“PS1 1”,我想結果是“PS1 Test”。你能幫我一下,是否可以使用SequenceMatcher獲???先感謝您!def findCommonStr(strings_list: list) -> str:        common_str = strings_list[0]        for i in range(1, n):            match = SequenceMatcher(None, common_str, strings_list[i]).get_matching_blocks()[0]                  common_str = common_str[match.b: match.b + match.size]        common_str = common_str.strip()        return common_str
查看完整描述

2 回答

?
嗶嗶one

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:]))


查看完整回答
反對 回復 2024-01-27
?
GCT1015

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 在你的案例中做得很好。我們不僅得到了常見的單詞,還得到了單詞片段,令人印象深刻。


查看完整回答
反對 回復 2024-01-27
  • 2 回答
  • 0 關注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號