Python 获取列表中所有可能的有序子列表

Python 获取列表中所有可能的有序子列表,python,python-3.x,list,sublist,Python,Python 3.x,List,Sublist,比如说,我有一个包含以下字母的列表: lst=['A','B','C','D'] 我需要得到列表中所有可能的子列表来维持顺序。因此,结果必须是: res=['A' 'AB' 'ABC' 'ABCD' 'B' 'BC' 'BCD' 'C' 'CD' 'D'] 我已经实现了以下for循环,但是出现了一个错误,说“TypeError:只能将str(而不是“list”)连接到str” 有没有更好更有效的方法 l

比如说,我有一个包含以下字母的列表:

lst=['A','B','C','D']
我需要得到列表中所有可能的子列表来维持顺序。因此,结果必须是:

res=['A'
     'AB'
     'ABC'
     'ABCD'
     'B'
     'BC'
     'BCD'
     'C'
     'CD'
     'D']
我已经实现了以下for循环,但是出现了一个错误,说“TypeError:只能将str(而不是“list”)连接到str”

有没有更好更有效的方法

lst=['A','B','C','D']

out = []
for i in range(len(lst)):
    for j in range(i, len(lst)):
        out.append( ''.join(lst[i:j+1]) )

print(out)
印刷品:

['A', 'AB', 'ABC', 'ABCD', 'B', 'BC', 'BCD', 'C', 'CD', 'D']

与每次执行时都使用重新定义的内部循环边界的嵌套循环不同,您可以使用以下方法为自己生成边界:

from itertools import combinations

lst = ['A','B','C','D']

out = []    
for s, e in combinations(range(len(lst) + 1), 2):
    out.append(''.join(lst[s:e]))
方便地从单个
范围
生成所有可能的开始和结束索引,按您所需的顺序一次生成一组索引。它还简化了代码,使等效的listcomp不会太难读取,允许您将三行代码压缩为一行:

out = [''.join(lst[s:e]) for s, e in combinations(range(len(lst) + 1), 2)]
无论哪种方式,
out
都以以下值结束:

['A', 'AB', 'ABC', 'ABCD', 'B', 'BC', 'BCD', 'C', 'CD', 'D']

这可能是最接近您所得到的,并将产生所需的结果:

res=[]
for x in range(len(lst)):
    for y in range(len(lst)):
        if x==y:
            res.append(lst[x])
        if y>x:
            res.append(''.join(lst[x:y+1]))
您描述的错误表示您正试图向列表中添加字符:

lst[x]+lst[y:len(lst)-1]
lst[x]是一个字符,lst[y:len(lst)-1]是一个字符列表,python不知道如何将其添加到一起。它可以使用连接函数添加字符和字符串

lst[x]+lst[y:len(lst)-1]