这有效:
s = 'beach'
lst = []
for c in range(len(s) + 1):
lst.append(list(zip(*[s[i:] for i in range(c)])))
lst2 = [''.join(j) for i in lst for j in i]
print(lst2)
# output
# ['b', 'e', 'a', 'c', 'h', 'be', 'ea', 'ac', 'ch', 'bea', 'eac', 'ach', 'beac', 'each', 'beach']
但是有更清洁,更优雅,更Pythonic的方式来达到同样的效果吗?
答案 0 :(得分:0)
首先:制作一个功能。这样你就可以强调输入和输出,并且还有一个默认的位置来解释。
第二:尝试使用隐含变量内容或使用的名称来概述您尝试应用的逻辑。
第三:尝试每行只做一个逻辑步骤,或者评论你做了什么。
from itertools import combinations_with_replacement
def parts(word):
""" Returns a list of all substrings of a string"""
combs = combinations_with_replacement(range(len(word)),2)
return [word[x[0]:x[1]+1] for x in combs]