Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:我有一个字符串和一个长度不同的列表列表,我希望按组返回与列表对应的字母_Python_String_List - Fatal编程技术网

Python:我有一个字符串和一个长度不同的列表列表,我希望按组返回与列表对应的字母

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'] 最后请注意,我

假设我有一个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']

最后请注意,我希望它是动态的,因为它可以应用于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))]