为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2022-01-05 11:08:11
鉴于以下列表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)
查看完整描述

2 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

仅对拆分后具有 2 个以上字母的元素使用itertools 组合。


import itertools

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


result = []


for item in myList:

    item_split = item.split(',') #split each item on , separator

    if len(item_split) <= 2:

        result.append(item)

    else: #more than 2 items after splitting. use combinations

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


查看完整回答
反对 回复 2022-01-05
?
森林海

TA贡献2011条经验 获得超2个赞

类似于Paritosh Singh 的回答,但有更多括号 :)


from operator import methodcaller

from itertools import chain, combinations


sep = ', '

splitter = methodcaller('split', sep)

def pairs(x):

    return combinations(x, 2 if len(x) > 1 else 1)

joiner = sep.join


result = list(map(joiner, 

                  chain.from_iterable(map(pairs, 

                                          map(splitter,

                                              my_list)))))

[题外话提醒]


...如果你使用Coconut,可以说读起来会更好一些:


from itertools import chain, combinations



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


my_result = (my_list

              |> split_each

              |> pairs

              |> chain.from_iterable

              |> join_each

              |> list

             )

    where:

        split_each = map$(.split(", "))

        pairs = map$((x) -> combinations(x, 2 if len(x) > 1 else 1))

        join_each = map$(", ".join)


查看完整回答
反对 回复 2022-01-05
  • 2 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号