簡體   English   中英

在Python中按順序比較字符串中的字符

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

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