程序给出给定字符串中所有潜在替换的列表,需要过滤掉不按字母顺序排列的子字符串
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])
我有一个给定字符串中所有可能的子字符串的列表,我需要只打印按字母顺序排列的子字符串。
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])