程序给出给定字符串中所有潜在替换的列表,需要过滤掉不按字母顺序排列的子字符串

Program gives list of all potential substings from a given string, need to filter out substrings not in alphabetical order

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

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 美国广播公司 abca 出租车 abcabc abcabcd 公元前 bca 出租车 英国广播公司 bcabcd 加州 出租车 cabc cabcd ab 美国广播公司 A B C D 公元前 bcd CD

我正在寻找的结果是:

ab 美国广播公司 公元前 ab 美国广播公司 A B C D 公元前 bcd CD

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

一种可能是生成所有子串并检查每个子串是否为小写字母:

import string

sequence = string.ascii_lowercase

# 
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])