簡體   English   中英

如果使用枚舉相同,如何刪除相鄰字母?

[英]How to remove neighbouring letter if they are the same using enumerate?

我正在嘗試使用 enumerate 解決此練習,但我不知道如何實現該值。 以數學方式我說如果 index 和 index+1 字母相同,則什么都不做,如果即將到來的字母不同,則寫字母。 但我不知道如何在 python Desired result aaabbbaas => abas做到這一點。

def zad6(string):
    b =""
    for index,letter in enumerate(string):
        if letter[index] == letter[index+1]:
            b += None
        else:
            b += letter
    return b
print(zad6("aaabbbaas"))

這是使用enumerate修復您的代碼,您可以檢查每個前一個字母是否相同,除了第一次(索引 == 0):

def zad6(string):
    for index, letter in enumerate(string):
        if index == 0:
            b = letter
        elif letter != string[index-1]:
            b += letter
    return b
print(zad6("Baabba"))

輸出: 'Baba'

注意。 這考慮大小寫,'B' 和 'b' 會不同,如果你想忽略大小寫使用letter.lower() != string[index-1].lower()

選擇

只是為了展示一個有效的解決方案,在現實生活中你可以使用itertools.groupby

from itertools import groupby

string = "Baabba"
''.join(l for l,_ in groupby(string))

只有當你有東西要追加時才追加,沒有必要追加 None (事實上,它不起作用)。 此外,您應該檢查字符串中是否有下一個字符,否則它會在最后一次迭代時失敗

def zad6(string):
    b = ""
    for index,letter in enumerate(string):
        if index == len(string)-1 or letter != string[index+1]:
            b+=letter
    return b
print(zad6("Baabba"))

這是一種不使用for循環的替代方法,看起來更簡單:

from operator import itemgetter


def zad6(string):
    filt = filter(lambda x: x[1] != string[x[0] - 1], enumerate(string))
    return ''.join(map(itemgetter(1), filt))


assert zad6('aaabbbaas') == 'abas'
assert zad6('Baabba') == 'Baba'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM