Python 程序给出了给定字符串中所有可能的子字符串的列表,需要过滤掉不按字母顺序排列的子字符串

Python 程序给出了给定字符串中所有可能的子字符串的列表,需要过滤掉不按字母顺序排列的子字符串,python,string,alphabetical,Python,String,Alphabetical,我有一个给定字符串中所有可能的子字符串的列表,我只需要按字母顺序打印子字符串 s = 'abcabcd' a = len(s) for x in range(a): for y in range(x,a-1): print(s[x:y+2]) 如果我改为: for x in range(a): for y in range(x,a-1): if s[y+1] >= s[y]: print(s[x:y+2]) 我

我有一个给定字符串中所有可能的子字符串的列表,我只需要按字母顺序打印子字符串

s = 'abcabcd'

a = len(s)

for x in range(a):
    for y in range(x,a-1):
        print(s[x:y+2])
如果我改为:

for x in range(a):
    for y in range(x,a-1):
        if s[y+1] >= s[y]:
            print(s[x:y+2])
我得到了完全相同的答案,没有任何东西被过滤掉

目前的结果如下:

ab abc abca 阿布卡布 abcabc abcabcd 卑诗省 bca bcab bcabc bcabcd ca 驾驶室 cabc cabcd ab abc abcd 卑诗省 卡介苗 光盘

我希望结果是:

ab abc 卑诗省 ab abc abcd 卑诗省 卡介苗 光盘


只有按字母顺序排列的子字符串。

一种可能性是生成所有子字符串,并检查每个子字符串是否使用小写字母:

s = 'abcabcd'

a = len(s)

for x in range(a):
    for y in range(x,a-1):
        print(s[x:y+2])
import string

sequence = string.ascii_lowercase

# https://stackoverflow.com/questions/22469997/how-to-get-all-the-contiguous-substrings-of-a-string-in-python
all_substrings = [s[i:j+1] for i in xrange(a) for j in xrange(i,a)]

for substr in all_substrings:
    if substr in sequence and len(substr) > 1:
        print(substr)
输出:

ab
abc
bc
ab
abc
abcd
bc
bcd
cd

只要找到一对顺序正确的字符,就打印子字符串,而不是测试子字符串中的所有字符

您可以使用
all()
函数来测试整个子字符串是否满足要求

s = 'abcabcd'
a = len(s)
for x in range(a):
    for y in range(x+2, a+1):
        if all(s[z] < s[z+1] for z in range(x, y-1)):
            print(s[x:y])
s='abcabcd'
a=len(s)
对于范围(a)内的x:
对于范围(x+2,a+1)内的y:
如果(x,y-1)范围内z的所有(s[z]
当你说字母顺序时,你是指那些字符按字母顺序排列的子字符串吗?e、 g.从示例字符串
'abc'
,您希望只输出
'abc'
'abc'
,和
'bcd'
?是的,dave,这就是我要找的。谢谢你帮我编辑我的问题。stackedoverflow上的第一个计时器和学习Python的第一周。剩下要打印的字符串是ab abc bc abc abc abc abc bc bcd cdok太好了,请回答问题并将所需的输出包括在问题中
abcaef
的输出应该是什么?是否应包括
ae
aef
?这将只查找连续字母的子字符串。如果输入是
adea
,它应该打印
ad
。感谢您的反馈,我只是根据他的示例中的所有字母顺序来回答,这些字母碰巧也是连续的。注释中的代码不可能读取,甚至不适用于Python,因为它缺少缩进。它看起来和我的一样,除了你在不同的地方对索引进行加减,正确吗。你的是对的,我的原始范围仍然是Python。