Python中的字母顺序

2 投票
3 回答
1842 浏览
提问于 2025-04-17 20:42

好的,我有一些关于以下代码的问题:

s = "wxyabcd"

myString = s[0]
longest = s[0]
for i in range(1, len(s)):
    if s[i] >= myString[-1]:
        myString += s[i]
        if len(myString) > len(longest):
            longest = myString
    else:
        myString = s[i]
print longest

答案是:"abcd" w wx wxy a ab abc abcd

我刚开始学Python,想了解这些循环是怎么工作的,但我很困惑。这个代码找到了按字母顺序排列的最长字符串... 实际的答案是"abcd",但我知道它是一个一个地处理的。

问题是:能不能有人帮我解释一下这段代码,让我更好地理解?因为有7个字符,我假设它是这样开始的:“对于范围1到7中的每个项目,如果这个项目比我的字符串[-1](也就是'w')要'大',那么我就加上这个字母和i中的项目,在这个例子中就是'x'。”

我在这之后就迷糊了... 从a到z:a > z?是这样吗?然后当s[i]不等于myString[-1]时,它是怎么跳到从's[i]'的'a'开始的。

抱歉,我有点乱。不过我试着在网上找一些地方来帮助我学习这个,但有些东西真的很难。我知道过几个月我会掌握这些,希望能更流利。

谢谢你!

3 个回答

0

我能想到两种方法(很快想到的)

def approach_one(text): # I approve of this method!
    all_substrings = list()
    this_substring = ""
    for letter in text:
        if len(this_substring) == 0 or letter > this_substring[-1]:
            this_substring+=letter
        else:
            all_substrings.append(this_substring)
            this_substring = letter
    all_substrings.append(this_substring)
    return max(all_substrings,key=len)

def approach_two(text):
    #forthcoming
1

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案。

当你在这些论坛上提问时,记得把你的问题描述得清楚明了。这样,其他人才能更好地理解你的问题,并给出有效的建议。通常,提供一些代码示例和错误信息会很有帮助。

另外,看到别人提问时,如果你能帮忙解决他们的问题,也可以参与进来。这不仅能帮助别人,还能让你自己更深入地理解编程。

总之,技术论坛是一个互相学习和帮助的地方,大家都在这里分享知识和经验。

# s is a 7 character string
s = "wxyabcd"

# set `mystring` to be the first character of s, 'w'
myString = s[0]

# set `longest` to be the first character of s, 'w'
longest = s[0]

# loop from 1 up to and not including length of s (7)
# Which equals for i in (1,2,3,4,5,6):
for i in range(1, len(s)):

    # Compare the character at i with the last character of `mystring`
    if s[i] >= myString[-1]:

        # If it is greater (in alphabetical sense)
        # append the character at i to `mystring`
        myString += s[i]

        # If this makes `mystring` longer than the previous `longest`,
        # set `mystring` to be the new `longest`
        if len(myString) > len(longest):
            longest = myString

    # Otherwise set `mystring` to be a single character string
    # and start checking from index i
    else:
        myString = s[i]

# `longest` will be the longest `mystring` that was formed,
# using only characters in descending alphabetic order
print longest
1

这里简单解释一下控制流程和Python的索引,希望能帮到你:

s = "wxyabcd"

myString = s[0] # 'w'
longest = s[0] # 'w' again, for collecting other chars
for i in range(1, len(s)): # from 1 to 7, exclusive of 7, so 2nd index to last
    if s[i] >= myString[-1]: # compare the chars, e.g. z > a, so x and y => True
        myString += s[i] # concatenate on to 'w'
        if len(myString) > len(longest): # evident?
            longest = myString # reassign longest to myString
    else:
        myString = s[i] # reassign myString to where you are in s.
print longest

撰写回答