Python:我有一个字符串和一个长度不同的列表列表,我希望按组返回与列表对应的字母
假设我有一个5个字母长的字符串,比如“ABCDE”。我还提供了一个列表,其中列出了拆分列表的不同方法,即[5]、[4,1]、[3,2]、…[1,1,1,1]]。如何返回所有不同的方法来拆分列表,如下所示。我遇到的问题是建立一个索引数量不均匀的循环Python:我有一个字符串和一个长度不同的列表列表,我希望按组返回与列表对应的字母,python,string,list,Python,String,List,假设我有一个5个字母长的字符串,比如“ABCDE”。我还提供了一个列表,其中列出了拆分列表的不同方法,即[5]、[4,1]、[3,2]、…[1,1,1,1]]。如何返回所有不同的方法来拆分列表,如下所示。我遇到的问题是建立一个索引数量不均匀的循环 INPUT 'ABCDE', list_of_configurations OUTPUT ['ABCDE'] ['A', 'BCDE'] ['AB', 'CDE'] ... ... ['A', 'B', 'C', 'D', 'E'] 最后请注意,我
INPUT
'ABCDE', list_of_configurations
OUTPUT
['ABCDE']
['A', 'BCDE']
['AB', 'CDE']
...
...
['A', 'B', 'C', 'D', 'E']
最后请注意,我希望它是动态的,因为它可以应用于5个字符的字符串或9个字符的字符串。我试图弄明白这一点,但我认为这超出了我目前的技能水平。这是一个典型的暴力问题。您必须生成可以拆分字符串的所有选项。您可以将其拆分为两个字母,也可以不拆分 对于长度为n的字符串,有n-1个位置可以拆分
a b c d e
^ ^ ^ ^
因此,每个长度为n-1
的二进制数组(只有0(如果您不想在该位置拆分字符串)和1(如果您想在该位置拆分字符串))对应一个可能的拆分选项。即
[1, 0, 0, 0] <=> ['a', 'bcde']
[1, 0, 1, 0] <=> ['a', 'bc', 'de']
另外,感谢你们的评论,我才意识到我回答了你们更广泛的问题。我将保留答案,但您可以使用与通过拆分配置生成字符串相关的片段:
current_string_split = ['']
for j in range(len(split)):
if split[j] == '0':
current_string_split[-1] += s[j]
else:
current_string_split.append(s[j])
如果要应用包含字符串可能“切片”的列表配置列表,下面是一种方法-基本上,我们获取一个切片并将字符串的其余部分传递到下一步:
s = 'ABCDE'
c = [[5], [4, 1], [3, 2], [1, 1, 1, 1, 1]]
for item in c:
result = []
s_copy = s
for index in item:
result.append(s_copy[:index])
s_copy = s_copy[index:]
print(result)
印刷品:
['ABCDE']
['ABCD', 'E']
['ABC', 'DE']
['A', 'B', 'C', 'D', 'E']
前面的答案是正确的,但Python允许我们以更紧凑的方式编写:
def my_split(string, config):
return [string[sum(config[:i]):sum(config[:i+1])] for i in range(len(config))]
要获得所有配置的结果,只需循环给定的配置并调用my_split函数。我认为拆分本身是在OP的情况下给出的,在这种特定情况下可能不需要生成所有拆分。只需获取由列表的配置列表指定的切片。无论如何,答案都很好。回答得很好。我使用了下面链接的代码来获得所有可能的迭代,但是您这样做的方式也非常有趣,如果我决定在python之外编程,这将非常有帮助。jbochi的回答是:尽管如此,它并不完全有效。我正试图找出原因。但是为了简单起见,如果输入字符串“ABC”,则返回[['AB']、['A'、['B']、['A'、[BC']、['A'、[B'、[C']]。不存在['ABC']或['AB','C'.@DonQuixote在数学上的一个小错误是指短字符串。我修好了。谢谢你指出来谢谢。一经解释,它往往显得如此简单!这个问题过于宽泛。“我不知道如何做X。请教我。”这不是StackOverflow的问题。相反,尽你最大的努力解决问题,公布你的结果,并询问如何解决你遇到的特定问题。
def my_split(string, config):
return [string[sum(config[:i]):sum(config[:i+1])] for i in range(len(config))]