簡體   English   中英

Python:列表理解可從隨機大小的字符串列表中創建最大n個大小的列表字符串

[英]Python: List comprehension to create a list strings of n-size maximum from list of strings of random size

這個想法是創建一個包含一定數量字符的字符串列表,並保留原始列表中的順序。 挑戰是僅使用列表理解來實現。

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

結果應該類似於["aaabb", "ccddee"] 結果列表中的字符串aaabb為5個字符長,而字符串ccddee為6,這是因為原始列表中的字符串無法分塊。 字符串的順序在創建結果時是相關的,但與結果無關,因此結束列表可以是["ccddee", "aaabb"]而不是["eeddcc", "bbaaa"] 每個字符串出現在結果列表中的次數與原始字符串中出現的次數相同,這意味着字符串的所有可能組合並不是此問題的真正目的,主要是因為結果列表中的每個字符串都是按照字符串中的順序創建的原版的。 只有兩個可能的輸出

["aaabb", "ccddee"]

要么

["ccddee", "aaabb"]

好吧,我想我明白了。 這是您要找的東西嗎?

>>> 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']]

它會產生所有可能的組合,這些組合可能已用於字符串的一個分區。 這是所有可能的結果:

>>> for str_len in range(len(''.join(list_string))):
        print str_len, [[''.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:])])]


0 []
1 []
2 []
3 []
4 []
5 []
6 [['aaabb', 'ccddee']]
7 [['aaabb', 'ccddee'], ['aaabbcc', 'ddee']]
8 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee']]
9 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee'], ['aaabbccdd', 'ee']]
10 [['aaa', 'bbccddee'], ['aaabb', 'ccddee'], ['aaabbcc', 'ddee'], ['aaabbccdd', 'ee']]

編輯:這是一個使用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']]
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

輸出:

['aaa', 'bb', 'cc', 'dd', 'ee', 'aaabb', 'aaacc', 'aaadd', 'aaaee', 'bbcc', 'bbdd', 'bbee', 'ccdd', 'ccee', 'ddee', 'bbccdd', 'bbccee', 'bbddee', 'ccddee']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM