在 python 中打印单词及其所有子字符串(按长度排序)时出现问题

问题描述 投票:0回答:2

这是代码:

a = input("Write a word: ")

substrings = []

for begin in range(len(a)):
    for end in range(begin + 1, len(a) + 1):
        substrings.append(a[begin:end])
substrings.sort(key=len)

for member in substrings:
    print(member)

我不明白这句话:

for end in range(begin + 1, len(a) + 1):

为什么要加一到

len(a)

python
2个回答
1
投票

range()
的结果不包含最终数字,因此如果您在第二个范围内使用
len(a)
,则最后的值将为
len(a)-1

同样,切片不包含最后一个索引的元素。因此,所有子字符串都不会包含输入字符串的最后一个字符。

因此,您要么必须在范围中使用

len(a)+1
,要么在切片中使用
end+1
。如果您选择后者,则需要将范围更改为
range(begin, len(a))
,这样您就不会跳过范围中的第一个字符。


0
投票

您需要在此处将

1
添加到
len(a)

for end in range(begin + 1, len(a) + 1):

因为您需要包含

a
的最后一个字符。

同样的道理,这个:

print(list(range(2)))

打印:

[0, 1]
,而不是 `[0, 1, 2]。

© www.soinside.com 2019 - 2024. All rights reserved.