创建一个python列表,其中第一个元素与列表的其余元素组合在一起,组合中不包含重复元组



我试图在python中创建一个元组列表,其中列表的第一个元素与列表的其他元素组合,但在组合的最终结果中不重复元组的第一个元件

我使用这个:

lst = [(2, 'ok'), (3, 'ok'), (3, 'fail'), (3, 'error'), (4, 'ok'), (4, 'fail'), (4, 'error')]
data = [[lst[0]] + list(i) for i in itertools.combinations(lst[1:], 2)]
for i in data:
print(i)

然后得到这个:

[(2, 'ok'), (3, 'ok'), (3, 'ok')]
[(2, 'ok'), (3, 'ok'), (3, 'fail')]
[(2, 'ok'), (3, 'ok'), (3, 'error')]
[(2, 'ok'), (3, 'ok'), (4, 'ok')]
[(2, 'ok'), (3, 'ok'), (4, 'fail')]
[(2, 'ok'), (3, 'ok'), (4, 'error')]
[(2, 'ok'), (3, 'fail'), (3, 'fail')]
[(2, 'ok'), (3, 'fail'), (3, 'error')]
[(2, 'ok'), (3, 'fail'), (4, 'ok')]
[(2, 'ok'), (3, 'fail'), (4, 'fail')]
[(2, 'ok'), (3, 'fail'), (4, 'error')]
[(2, 'ok'), (3, 'error'), (3, 'error')]
[(2, 'ok'), (3, 'error'), (4, 'ok')]
[(2, 'ok'), (3, 'error'), (4, 'fail')]
[(2, 'ok'), (3, 'error'), (4, 'error')]
[(2, 'ok'), (4, 'ok'), (4, 'ok')]
[(2, 'ok'), (4, 'ok'), (4, 'fail')]
[(2, 'ok'), (4, 'ok'), (4, 'error')]
[(2, 'ok'), (4, 'fail'), (4, 'fail')]
[(2, 'ok'), (4, 'fail'), (4, 'error')]
[(2, 'ok'), (4, 'error'), (4, 'error')]

但是你想要这个:

[(2, 'ok'), (3, 'ok'), (4, 'ok')]
[(2, 'ok'), (3, 'ok'), (4, 'fail')]
[(2, 'ok'), (3, 'ok'), (4, 'error')]
[(2, 'ok'), (3, 'fail'), (4, 'ok')]
[(2, 'ok'), (3, 'fail'), (4, 'fail')]
[(2, 'ok'), (3, 'fail'), (4, 'error')]
[(2, 'ok'), (3, 'error'), (4, 'ok')]
[(2, 'ok'), (3, 'error'), (4, 'fail')]
[(2, 'ok'), (3, 'error'), (4, 'error')]

提前感谢!

PS:原始CCD_ 2的CCD_;1000

lst = [(2, 'ok'), (3, 'ok'), (3, 'fail'), (3, 'error'), .... (n, 'ok'), (n, 'fail'), (n, 'error')]

您可以将具有相同编号的项目分组,然后使用itertool.product()

import itertools
lst = [(2, 'ok'), (3, 'ok'), (3, 'fail'), (3, 'error'), (4, 'ok'), (4, 'fail'), (4, 'error')]
groups = {}
for number, word in lst:
if number not in groups:
groups[number] = []
groups[number].append( (number, word) )
data = groups.values()
for item in itertools.product(*data):
print(item)

结果:

((2, 'ok'), (3, 'ok'), (4, 'ok'))
((2, 'ok'), (3, 'ok'), (4, 'fail'))
((2, 'ok'), (3, 'ok'), (4, 'error'))
((2, 'ok'), (3, 'fail'), (4, 'ok'))
((2, 'ok'), (3, 'fail'), (4, 'fail'))
((2, 'ok'), (3, 'fail'), (4, 'error'))
((2, 'ok'), (3, 'error'), (4, 'ok'))
((2, 'ok'), (3, 'error'), (4, 'fail'))
((2, 'ok'), (3, 'error'), (4, 'error'))

编辑:

您也可以使用itertools.groupby(lst, lambda x:x[0])对项目进行分组。

import itertools
lst = [(2, 'ok'), (3, 'ok'), (3, 'fail'), (3, 'error'), (4, 'ok'), (4, 'fail'), (4, 'error')]
groups = itertools.groupby(lst, lambda x:x[0])
data = [list(val) for key, val in groups]
#keys, data = zip(*groups)  # ???

for item in itertools.product(*data):
print(item)

最新更新