[英]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.