猿问

查找每个单独列表元素的所有组合

鉴于以下列表


myList = ['A' , 'B' , 'C, D' , 'E, F, G', 'H' , 'I']

我如何为列表中超过 2 个字符的每个元素获取所有可能的组合。如果有意义的话,我也不想将所有元素组合在一起。


使用上述列表的示例输出如下所示:


myList = ['A' , 'B' , 'C, D' , 'E, F' , 'E, G' , 'F, G' , 'H' , 'I']

注意:我只关心找到每个具有两个以上字符的元素的组合。


我曾尝试使用 itertools 几次,但似乎想找到列表中所有元素的所有可能组合,而不是单个部分的组合。


for L in range(0, len(myList)+1):

    for subset in itertools.combinations(myList, L):

        print(subset)


慕妹3146593
浏览 159回答 2
2回答

眼眸繁星

仅对拆分后具有 2 个以上字母的元素使用itertools 组合。import itertoolsmyList = ['A' , 'B' , 'C, D' , 'E, F, G', 'H' , 'I']result = []for item in myList:&nbsp; &nbsp; item_split = item.split(',') #split each item on , separator&nbsp; &nbsp; if len(item_split) <= 2:&nbsp; &nbsp; &nbsp; &nbsp; result.append(item)&nbsp; &nbsp; else: #more than 2 items after splitting. use combinations&nbsp; &nbsp; &nbsp; &nbsp; result.extend(",".join(pair) for pair in itertools.combinations(item_split, 2))print(result)#Output:['A', 'B', 'C, D', 'E, F', 'E, G', ' F, G', 'H', 'I']

森林海

类似于Paritosh Singh 的回答,但有更多括号 :)from operator import methodcallerfrom itertools import chain, combinationssep = ', 'splitter = methodcaller('split', sep)def pairs(x):&nbsp; &nbsp; return combinations(x, 2 if len(x) > 1 else 1)joiner = sep.joinresult = list(map(joiner,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; chain.from_iterable(map(pairs,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; map(splitter,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; my_list)))))[题外话提醒]...如果你使用Coconut,可以说读起来会更好一些:from itertools import chain, combinationsmy_list = ['A' , 'B' , 'C, D' , 'E, F, G', 'H' , 'I']my_result = (my_list&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |> split_each&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |> pairs&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |> chain.from_iterable&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |> join_each&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |> list&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)&nbsp; &nbsp; where:&nbsp; &nbsp; &nbsp; &nbsp; split_each = map$(.split(", "))&nbsp; &nbsp; &nbsp; &nbsp; pairs = map$((x) -> combinations(x, 2 if len(x) > 1 else 1))&nbsp; &nbsp; &nbsp; &nbsp; join_each = map$(", ".join)
随时随地看视频慕课网APP

相关分类

Python
我要回答