生成字符串子串后筛选元音开头子串结果为空的错误排查
排查你的Python子串筛选代码问题
首先,最直接导致s为空的核心问题是你用了//作为注释符号,但Python的注释语法是用#!比如a=[] //将子串存入空列表这行代码,Python会把//识别成除法运算符,试图让空列表和字符串做除法运算,直接抛出语法错误,代码根本没法正常执行完,最后s自然是空的。
除此之外,代码里还有几个可以优化和修正的细节:
多余的循环变量手动递增:你在生成子串的两层
for循环里,手动写了j=j+1和i=i+1,但for循环本身会自动遍历range里的每一个值,手动修改循环变量完全起不到作用,反而容易让逻辑混乱,直接删掉这两行就行。筛选子串的逻辑可以更简洁:你用
k和l来遍历列表a其实没必要,直接遍历a里的每个子串会更清晰。而且l一直是0,完全可以直接写substring[0]来取子串的首字母。生成子串时的多余括号:
a.append((string[i:j+1]))里的括号是多余的,会把字符串包装成元组(比如('s',)),虽然这不会导致筛选失败,但没必要多此一举,直接写a.append(string[i:j+1])就好。
修正后的代码如下:
string = 'shivraj' a = [] # 循环生成所有子串 for i in range(len(string)): for j in range(i, len(string)): a.append(string[i:j+1]) s = [] # 筛选元音开头的子串 for substring in a: if substring[0] in 'aeiou': s.append(substring) print(s) # 输出结果:['i', 'iv', 'ivr', 'ivra', 'ivraj', 'a', 'aj']
这样运行后,s就会正确存储所有以元音开头的子串啦。
内容的提问来源于stack exchange,提问作者Varish Tripathi
相关产品推荐
相关产品推荐

