Python 使用列表理解将字符串拆分为K个子字符串
我有一根长长的绳子,就像这样Python 使用列表理解将字符串拆分为K个子字符串,python,Python,我有一根长长的绳子,就像这样 s='abcdabcdefghi' 我想将其拆分为K个子字符串,其中每个子字符串的长度必须至少为1,即非空。我想要所有这些可能的组合 如果K为3,则我期望的输出必须如下所示 [['abcda', 'bcdabcdabcda', 'bcdefghi'], [.....], [....], ... ] 我想用列表理解来做这件事,但我被卡住了。有可能实施吗。?还有其他更快的替代方案吗?使用,您可以获得分离索引对: >>> s = 'abcdef' &g
s='abcdabcdefghi'
我想将其拆分为K个子字符串,其中每个子字符串的长度必须至少为1,即非空。我想要所有这些可能的组合
如果K
为3,则我期望的输出必须如下所示
[['abcda', 'bcdabcdabcda', 'bcdefghi'], [.....], [....], ... ]
我想用列表理解来做这件事,但我被卡住了。有可能实施吗。?还有其他更快的替代方案吗?使用,您可以获得分离索引对:
>>> s = 'abcdef'
>>> k = 3
>>> list(combinations(range(1, len(s)), k-1))
[(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)]
使用该索引对获取字符串片段
->((1,2)
,s[:1]
,s[1:2]
)s[2:
->((1,3)
,s[:1]
,s[1:3]
)s[3:
->((4,5)
,s[:4]
,s[4:5]
)s[5:
s[:1]==s[0:1]==s[None:1]
s[2:][=s[2:len(s)]==s[2:None]
s = 'abcd'
substrings = []
# find slice of first part - from a|bcd to ab|cd
for first_slice in range(len(s)-2):
# find slice of second and last part, for bcd - from b|cd to bc|d
# for cd - just c|d
for second_slice in range(first_slice+1, len(s)-1):
substrings.append([s[:first_slice+1], s[first_slice+1: second_slice+1], s[second_slice+1:]])
print(substrings) # -> [['a', 'b', 'cd'], ['a', 'bc', 'd'], ['ab', 'c', 'd']]
s = 'abcdabcdabcdabcdabcdefghi'
print(len(substrings)) # -> 276
为什么K=3的预期输出不是以
['a','b','cdabcdcdefghi']
开头?我只是给出了一个随机样本。顺序不重要你想要所有可能的K
子列表组合吗?我想要所有可能的K个子列表组合。我正在寻找一些更快的方法。最好是列表理解。@SreeramTP,据我所知,时间复杂度是一样的。但其他解决方案(Filip Młynarski)仅适用于k=3的情况。若要继续,您需要为循环添加另一个。
s = 'abcd'
substrings = []
# find slice of first part - from a|bcd to ab|cd
for first_slice in range(len(s)-2):
# find slice of second and last part, for bcd - from b|cd to bc|d
# for cd - just c|d
for second_slice in range(first_slice+1, len(s)-1):
substrings.append([s[:first_slice+1], s[first_slice+1: second_slice+1], s[second_slice+1:]])
print(substrings) # -> [['a', 'b', 'cd'], ['a', 'bc', 'd'], ['ab', 'c', 'd']]
s = 'abcdabcdabcdabcdabcdefghi'
print(len(substrings)) # -> 276