python - 获取给定字符串的唯一子字符串列表
问题描述
任务是在 python 中获取一个唯一的子字符串列表。
我目前正在使用将问题分解为两部分:获取所有子字符串的列表,然后获取唯一的子字符串。
我正在使用以下代码:
substrings=[]
for i in range(0,len(inputstring)+1):
for j in range(i+1,len(inputstring)+1):
substr=inputstring[i:j]
substrings.append(substr)
uniq=[]
for ss in substrings:
if ss not in uniq:
uniq.append(ss)
有没有更快的方法来解决这个问题,或者所谓的 python 方式以更灵活的方式来解决这个问题?
一个简单的示例字符串是:"aabaa"
,可能的子字符串是[a,a,b,a,a,aa,ab,ba,aa,aab,aba,baa,aaba,abaa,aabaa]
,最后需要的唯一子字符串[a,b,aa,ab,ba,aab,aba,baa,aaba,abaa,aabaa]
解决方案
使用 Itertools 和 Set。类似于 Edwin 的答案,但使用 Itertools,并且在一行中。
import itertools
uniq=list(set([inputstring[x:y] for x, y in itertools.combinations(
range(len(inputstring) + 1), r = 2)]))
基本上,您使用 itertools 首先查找所有组合,然后设置查找唯一元素,然后转换为列表。
来自https://www.geeksforgeeks.org/python-get-all-substrings-of-given-string/的组合代码
编辑以获得更清晰的解释:首先,使用组合来获取与子字符串对应的所有索引对。这里的技巧是 itertools.combinations 从所有 (0,X) 对开始,然后是 (1,X) 对等。由于我们使用组合而不是排列,因此我们消除了反向子字符串,例如 (1,0)因为它们将在 (0,X) 枚举中看到。
然后只需将它们与列表推导一起使用来获取所有子字符串,使用集合来查找唯一元素,然后转换为列表。
希望有帮助
推荐阅读
- java - 使用 jdk.internal.net.http
- javascript - 如何使用 JavaScript 编辑表格内的 HTML
- html - 定位文字和图片?
- session - 使关闭按钮会话持久化
- php - 从 mysql 检索以填充表单时出现问题
- javascript - 在 JavaScript 中提升声明与表达式
- html - xsl 排序不适用于 xsl:apply-templates
- javascript - Node.js Express:TypeError:对象不是函数
- c - C - 在运行时重塑二维数组
- javascript - setTimeout导致注册后加载错误页面,更新-编译问题