[英]Comparing characters in a string sequentially in Python
我試圖找出如何比較字符串中的字符與字符串中的下一個字符。 例如,如果我有一個字符串:
s = 'vzcbotdebobeggglakyl'
我希望能夠比較第一個字符和第二個字符,如果第二個字符大於或等於第一個字符(按字母順序,a <b,g> e,y = y等)我想將1添加到另一個變量(基本上是一個計數器)。 如果不是,我想將計數器重置為0.並且基本上重復整個過程的字符串長度。 如果計數器變得大於maxlen變量,則向maxlen添加一個(或者使maxlen = sublen)。 到目前為止我的嘗試是(而且我認為它有效):
s = 'vzcbotdebobeggglakyl'
sublen = 1
maxlen = 0
startnum = 0
for char in s:
stopnum = startnum + 1
if stopnum < len(s):
charone = s[startnum]
chartwo = s[stopnum]
if charone <= chartwo:
sublen += 1
startnum += 1
if sublen > maxlen:
maxlen = sublen
else:
startnum +=1
sublen = 1
else:
sublen = 0
print 'Longest substring is', maxlen, 'characters.'
現在,我還想做的是打印出一行字符串。 我已經在這個工作了五個小時,但是無法做到這一點。 我嘗試了很多不同的事情,我現在基本上比我開始時更加困惑。 在上面的例子中,我想說
Longest substring is begggl, which is 6 characters.
這不太明顯,但似乎有效:
seq = "vzcbotdebobeggglakyl"
import itertools
result = max(
(
list(next(sub)) + [b for a, b in sub]
for ascending, sub in itertools.groupby(zip(seq,seq[1:]), lambda x: x[0] <= x[1])
if ascending
),
key=len
)
print ''.join(result)
這個怎么樣:
def longest_ascending(s):
matches = []
current = [s[0]]
for index, character in enumerate(s[1:]):
if character >= s[index]:
current.append(character)
else:
matches.append(current)
current = [character]
matches.append(current)
return "".join(max(matches, key=len))
說明:
matches
是包含“升序”字符的所有子字符串的列表。 current
是在迭代字符串時構建的升序字符的子字符串。 我們從字符串的第一個字符開始。 enumerate()
幫助我們跟蹤前一個字符的索引(因為枚舉從0
開始,我們從第二個字符開始迭代字符串)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.