![](/img/trans.png)
[英]How to find all unique combinations of k size tuple using a single element from each list of n lists
[英]Find all combinations of each individual list element
给出以下列表
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)
拆分后,仅对两个以上字母的元素使用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']
与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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.