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

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

從兩個 python 字符串中刪除相等的字符

從兩個 python 字符串中刪除相等的字符

aluckdog 2023-05-23 10:19:07
我正在編寫一個 Python 代碼來從位于相同索引上的兩個字符串中刪除相同的字符。例如,remove_same('ABCDE', 'ACBDE')應該將兩個參數設為 BC 和 CB。我知道字符串在這里是不可變的,所以我將它們轉換為列表。我收到索引錯誤。def remove_same(l_string, r_string):    l_list = list(l_string)    r_list = list(r_string)    i = 0    while i != len(l_list):        print(f'in {i} length is {len(l_list)}')        while l_list[i] == r_list[i]:            l_list.pop(i)            r_list.pop(i)        if i == len(l_list) - 1:            break        if i != len(l_list):            i += 1    return l_list[0] == r_list[0]
查看完整描述

4 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

在那種情況下我會避免使用 while 循環,我認為這是一個更好更清晰的解決方案:


def remove_same(s1, s2):

    l1 = list(s1)

    l2 = list(s2)

    out1 = []

    out2 = []

    for c1, c2 in zip(l1, l2):

        if c1 != c2:

            out1.append(c1)

            out2.append(c2)

            

    s1_out = "".join(out1)

    s2_out = "".join(out2)

    

    print(s1_out)

    print(s2_out)


它可以使用一些列表理解來縮短,但我試圖盡可能明確


查看完整回答
反對 回復 2023-05-23
?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我覺得這可能是個問題。

while l_list[i] == r_list[i]:
            l_list.pop(i)
            r_list.pop(i)

這可以減少列表的大小,它可以低于i.

如果 l_list = ["a"] 和 r_list = ["a"],請對此進行預演。


查看完整回答
反對 回復 2023-05-23
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

在循環中修改列表通常不是一個好主意。這是一個更簡潔、更 Pythonic 的解決方案。這兩個字符串被壓縮并并行處理。每對相等的字符被丟棄,剩余的字符排列成新的字符串。


a = 'ABCDE'

b = 'ACFDE'


def remove_same(s1, s2):

    return ["".join(s) for s

            in zip(*[(x,y) for x,y in zip(s1,s2) if x!=y])]


remove_same(a, b)

#['BC', 'CF']


查看完整回答
反對 回復 2023-05-23
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

干得好:


def remove_same(l_string, r_string):

    # if either string is empty, return False

    if not l_string or not r_string:

        return False

    l_list = list(l_string)

    r_list = list(r_string)

    limit = min(len(l_list), len(r_list))

    i = 0

    while i < limit:

        if l_list[i] == r_list[i]:

            l_list.pop(i)

            r_list.pop(i)

            limit -= 1

        else:

            i += 1


    return l_list[0] == r_list[0]



print(remove_same('ABCDE', 'ACBDE'))

輸出:


False


查看完整回答
反對 回復 2023-05-23
  • 4 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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