Python:List comprehension从随机大小的字符串列表创建nsize maximum的列表字符串

2024-10-04 09:20:05 发布

您现在位置:Python中文网/ 问答频道 /正文

其思想是创建一个包含一定数量字符的字符串列表,保持原始列表的顺序。挑战在于仅使用列表理解来完成它。在

list_string = [ "aaa", "bb", "cc", "dd", "ee"]
str_len = 6
[some_list_comprehension]

结果应该是["aaabb", "ccddee"]。结果列表中的字符串aaabb长度为5个字符,而字符串ccddee为6个字符,这是因为原始列表中的字符串无法分块。字符串的顺序在创建结果时是相关的,但与结果无关,因此结束列表可以是["ccddee", "aaabb"],而不是{}。每个字符串在结果列表中出现的次数与在原始字符串中出现的次数相同,这意味着所有可能的字符串组合都不是这个问题的目标,主要是因为结果列表中的每个字符串都是按照原始字符串的顺序创建的。 只有2种可能的输出

^{pr2}$

或者

["ccddee", "aaabb"]

Tags: 字符串列表数量string顺序字符次数list
2条回答
from itertools import combinations
list_string = [ "aaa", "bb", "cc", "dd", "ee"]
minn=min(map(len,list_string))
maxx=max(map(len,list_string))
str_len=6
lis=[''.join(x) for i in range(1,maxx+1) for x in combinations(list_string,i) if len(''.join(x))<=str_len]        
print lis

输出:

^{pr2}$

好吧,我想我明白了。这就是你要找的吗?在

>>> list_string = [ "aaa", "bb", "cc", "dd", "ee"]
>>> str_len = 6
>>> [[''.join(list_string[:i]), ''.join(list_string[i:])] for i in xrange(len(list_string)) if all(1 <= len(s) <= str_len for s in [''.join(list_string[:i]), ''.join(list_string[i:])])]
[['aaabb', 'ccddee']]

它生成所有可能的组合,这些组合可能与字符串的一个分区一起工作。以下是所有可能的结果:

^{pr2}$

编辑:下面是一个使用filter但不会在表达式中重复结果两次的版本,并且格式更好:

>>> filter(
        lambda res: all(1 <= len(s) <= str_len for s in res),
        [[''.join(list_string[:i]), ''.join(list_string[i:])]
         for i in xrange(len(list_string))])
[['aaabb', 'ccddee']]

相关问题 更多 >