我本人和一群人“下注”,球队将在不同的足球比赛结果中获胜(不涉及金钱)。有3种可能的积分奖励给玩家。
points = [0, 3, 4]
所以,如果我说甲队将以1-0获胜。
因此,对于该特定下注,我可以获得0、3或4分。其他参与此投注的人也是如此。所以我试图获得所有可能的结果组合。对于两个玩家,我希望能够获得这种输出(例如两个玩家的示例):
"Player 1" 0 0 0 3 3 3 4 4 4
"Player 2" 0 3 4 0 3 4 0 3 4
我以前有一个Excel文件,该文件使用VBA计算这些可能的结果,但是播放器的数量是固定的,因此该代码不适合添加或删除播放器。
我正在尝试创建一个函数,该函数可以针对不同数量(和动态数量)的玩家计算并输出具有所有可能结果组合的某些数据结构。
我已经阅读了几个有关python组合的问题(超过10个),但没有一个涵盖此特定方案。它们通常涵盖使用itertools
进行排列(不是这样,因为我们每个人都可以得到相同的结果),多个组合(如果组合的数量超过可能结果的值,将不起作用(3))。通过使用以下方法确实获得了与我需要的东西类似的东西:
string_points = str(points[0])+str(points[1])+str(points[2])
for p in itertools.product(string_points, repeat=3):
print(p)
结果是一个元组序列,其中包含可能结果的字符串值:
('0', '0')
('0', '3')
('0', '4')
('3', '0')
('3', '3')
('3', '4')
('4', '0')
('4', '3')
('4', '4')
但是作为字符串,我无法对其进行任何操作或计算统计信息...
有什么办法可以使用itertools来完成这项工作? 有人会建议完全不同的方法吗?我愿意接受任何一种解决方案。 是否有任何数据结构可以将参与者的姓名纳入可能的结果?预先感谢...
答案 0 :(得分:0)
无需首先将值转换为字符串!
for p in itertools.product(points, repeat=2):
这将为您订购一对整数。
具体来说,您想要的是积分列表本身的笛卡尔积,其 n 次(其中 n 是玩家数量)。这正是itertools.product
与repeat
关键字为您带来的收获。