我试图在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)