【发布时间】:2020-04-08 02:05:30
【问题描述】:
我怎样才能让它变得更好?有没有什么算法/方法可以让它变得更好更短?
def sub_string_finder(string):
given_string = string.upper()
substring_of = []
length = len(given_string)
# find all substring and put it in substring array
for i in range(length):
for j in range(i + 1, length + 1):
substring_of.append(given_string[i:j])
return substring_of
s = input("Enter a string: ")
print(f"Number of substring: {len(sub_string_finder(s))}")
print(sub_string_finder(s))
“开发者”的输出:
Number of substring: 45
['D', 'DE', 'DEV', 'DEVE', 'DEVEL', 'DEVELO', 'DEVELOP', 'DEVELOPE', 'DEVELOPER', 'E', 'EV', 'EVE', 'EVEL', 'EVELO', 'EVELOP', 'EVELOPE', 'EVELOPER', 'V', 'VE', 'VEL', 'VELO', 'VELOP', 'VELOPE', 'VELOPER', 'E', 'EL', 'ELO', 'ELOP', 'ELOPE', 'ELOPER', 'L', 'LO', 'LOP', 'LOPE', 'LOPER', 'O', 'OP', 'OPE', 'OPER', 'P', 'PE', 'PER', 'E', 'ER', 'R']
Update
这是迄今为止使用itertools 和combinations 的最终答案,感谢受访者。为了提高可读性,我们可以使用换行符。请记住括号和大括号之间的Python allows line breaks。
from itertools import combinations
def sub_string_finder(string):
substring_of = [
string.upper()[i:j]
for i, j in combinations(range(len(string) + 1), r=2)
]
return substring_of
如果你有兴趣了解 Python 列表理解,可以查看this。
【问题讨论】:
-
至于算法本身,您可能会阅读stackoverflow.com/questions/2560262/…,但请注意这是关于有点不同的任务(查找字符串的所有 unique 子字符串)
-
输入
aaaa的输出应该是什么? -
输入 == "aaaa", 输出 == ['A', 'AA', 'AAA', 'AAAA', 'A', 'AA', 'AAA', 'A' , 'AA', 'A']
标签: python python-3.x string algorithm substring