Arrays Python itertools.combines:如何同时获得组合中组合数的索引

Arrays Python itertools.combines:如何同时获得组合中组合数的索引,arrays,python-3.x,list,combinations,itertools,Arrays,Python 3.x,List,Combinations,Itertools,根据此处提出的问题:,给定以下代码: import itertools my_list = [7, 5, 5, 4] pairs = list(itertools.combinations(my_list , 2)) #pairs = [(7, 5), (7, 5), (7, 4), (5, 5), (5, 4), (5, 4)] indexes = list(itertools.combinations(enumerate(my_list ), 2) #indexes = [(0, 1),

根据此处提出的问题:,给定以下代码:

import itertools
my_list = [7, 5, 5, 4]

pairs = list(itertools.combinations(my_list , 2))
#pairs = [(7, 5), (7, 5), (7, 4), (5, 5), (5, 4), (5, 4)]

indexes = list(itertools.combinations(enumerate(my_list ), 2)
#indexes = [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

有没有办法在一行中获得
索引
,这样我的代码的复杂性就可以降低(例如使用
枚举
或类似的方法)?

@Maf-试试这个,这是@jonsharpe之前建议的,使用
zip

从pprint导入pprint
从itertools导入组合
我的清单=[7,5,5,4]
>>>pprint(列表(zip(组合(枚举(我的列表),2),组合(我的列表,2)))
[(((0, 7), (1, 5)), (7, 5)),
(((0, 7), (2, 5)), (7, 5)),
(((0, 7), (3, 4)), (7, 4)),
(((1, 5), (2, 5)), (5, 5)),
(((1, 5), (3, 4)), (5, 4)),
(((2, 5), (3, 4)), (5, 4))]
(显式优于隐式。简单优于复杂。) 出于灵活性,我会使用列表理解:

list((x, (x[0][1], x[1][1])) for x in list(combinations(enumerate(my_list), 2)))
这可以使用
operator.itemgetter
等进一步扩展


此外,我们的想法是只使用迭代器运行一次,这样该方法就可以潜在地应用于其他非确定性迭代器,比如说,从
随机选择中生成

Just
zip
这两个迭代器,而不是将它们消耗到列表中。你能帮我怎么做吗?谢谢。我正在阅读以尽快获得解决方案。我认为第二个示例的输出不正确,如果您从enumerate中获取元组的组合,即值及其索引,则发出的第一项将是
((0,7),(1,5))
。您显示的是单独索引组合的输出,例如从
范围(len(my_list))
。我们同时编写。这似乎是最好的解决办法。我将选择你的答案。谢谢你的回答!