当前位置: 首页 > 知识库问答 >
问题:

用Python生成给定游戏列表的可能组合

皮承基
2023-03-14

我想从给定的比赛列表(如“法国-德国”)中生成可能性的总数。这样,总结果将是3种可能的结果,即本例{主队获胜,他们平局,或客队获胜}。

  • 可能的结果将是3
1   
FRANCE - GERMANY 1
2   
FRANCE - GERMANY x
3   
FRANCE - GERMANY 2

另一个例子是[‘法国-德国’、‘西班牙-意大利’]

  • 可能的结果数为9
1
FRANCE - GERMANY 1
SPAIN - ITALIA 1 
2   
FRANCE - GERMANY 1
SPAIN - ITALIA x 
3   
FRANCE - GERMANY 1
SPAIN - ITALIA 2
4   
FRANCE - GERMANY x
SPAIN - ITALIA 1
5   
FRANCE - GERMANY x
SPAIN - ITALIA x
6   
FRANCE - GERMANY x
SPAIN - ITALIA 2
7   
FRANCE - GERMANY 2
SPAIN - ITALIA 1
8   
FRANCE - GERMANY 2
SPAIN - ITALIA x
9   
FRANCE - GERMANY 2
SPAIN - ITALIA 2

下面是我的代码

import itertools

games = ['France - Germany']
case = ["1","X","2"]
results = []
for eachcase in case:
    for game in games:
        results.append("%s %s" % (game, eachcase))


print("\n".join(results)+ "\n %s" %len(results))

列表中项目的输出为

France - Germany 1
France - Germany X
France - Germany 2

这很好,但随着列表项数的增加,它不起作用。如有任何帮助,请提前感谢:)

共有3个答案

年烈
2023-03-14

对于给定的游戏列表,我们可以使用itertools。产品用于此:

from itertools import product

def game_product(games):
    for i, res in enumerate(product('1x2', repeat=len(games)), 1):
        print(i)
        for gr in zip(games, res):
            print('{} {}'.format(*gr))

例如:

>>> game_product(['France - Germany', 'Spain - Italia', 'Brazil - Spain'])
1
France - Germany 1
Spain - Italia 1
Brazil - Spain 1
2
France - Germany 1
Spain - Italia 1
Brazil - Spain x
3
France - Germany 1
Spain - Italia 1
Brazil - Spain 2
4
France - Germany 1
Spain - Italia x
Brazil - Spain 1
5
France - Germany 1
Spain - Italia x
Brazil - Spain x
6
France - Germany 1
Spain - Italia x
Brazil - Spain 2
7
France - Germany 1
Spain - Italia 2
Brazil - Spain 1
8
France - Germany 1
Spain - Italia 2
Brazil - Spain x
9
France - Germany 1
Spain - Italia 2
Brazil - Spain 2
10
France - Germany x
Spain - Italia 1
Brazil - Spain 1
11
France - Germany x
Spain - Italia 1
Brazil - Spain x
12
France - Germany x
Spain - Italia 1
Brazil - Spain 2
13
France - Germany x
Spain - Italia x
Brazil - Spain 1
14
France - Germany x
Spain - Italia x
Brazil - Spain x
15
France - Germany x
Spain - Italia x
Brazil - Spain 2
16
France - Germany x
Spain - Italia 2
Brazil - Spain 1
17
France - Germany x
Spain - Italia 2
Brazil - Spain x
18
France - Germany x
Spain - Italia 2
Brazil - Spain 2
19
France - Germany 2
Spain - Italia 1
Brazil - Spain 1
20
France - Germany 2
Spain - Italia 1
Brazil - Spain x
21
France - Germany 2
Spain - Italia 1
Brazil - Spain 2
22
France - Germany 2
Spain - Italia x
Brazil - Spain 1
23
France - Germany 2
Spain - Italia x
Brazil - Spain x
24
France - Germany 2
Spain - Italia x
Brazil - Spain 2
25
France - Germany 2
Spain - Italia 2
Brazil - Spain 1
26
France - Germany 2
Spain - Italia 2
Brazil - Spain x
27
France - Germany 2
Spain - Italia 2
Brazil - Spain 2
敖毅
2023-03-14

您可以使用itertools.product与重复参数一起创建与游戏总数一样多的游戏结果产品。

from itertools import product
games = ['France - Germany', 'Spain - Italia']
case = ["1","X","2"]

results = []
for i in product(case, repeat = len(games)):
    results.append({k:v for k, v in zip(games, i)})
    #if you prefer list of tuples instead, alternatively,
    #results.append([(k, v) for k, v in zip(games, i)])

print(results)

输出:

[{'France - Germany': '1', 'Spain - Italia': '1'},
 {'France - Germany': '1', 'Spain - Italia': 'X'},
 {'France - Germany': '1', 'Spain - Italia': '2'},
 {'France - Germany': 'X', 'Spain - Italia': '1'},
 {'France - Germany': 'X', 'Spain - Italia': 'X'},
 {'France - Germany': 'X', 'Spain - Italia': '2'},
 {'France - Germany': '2', 'Spain - Italia': '1'},
 {'France - Germany': '2', 'Spain - Italia': 'X'},
 {'France - Germany': '2', 'Spain - Italia': '2'}]
柴禄
2023-03-14

您可以通过列表理解轻松做到这一点:

fg = [ ("FRANCE-GERMANY",outcome) for outcome in (1,"x",2) ]
for g1 in fg: print(g1)
print("")

si = [ ("SPAIN-ITALY",outcome) for outcome in (1,"x",2) ]
final = [ (g1,g2) for g1 in fg for g2 in si ]
for g1,g2 in final:
    print(g1)
    print(g2)
    print("")

如果你想要一个更通用的方法,在迭代工具模块中的产品功能也可以帮助:

from itertools import product
fg    = list(product(["FRANCE-GERMANY"],(1,"x",2)))
si    = list(product(["SPAIN-ITALY"],(1,"x",2)))
final = list(product(fg,si))
 类似资料:
  • 本文向大家介绍给定列表中的Python组图,包括了给定列表中的Python组图的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个将所有字谜分组到一个列表中的程序。首先,让我们看看什么是字谜。 具有相同字符但顺序不同的任何两个字符串称为七字组。 在深入探讨解决方案之前,让我们看一个示例。 输入值 输出结果 我们将把问题分解为两部分。首先,我们将编写一个检查两个字符串是否为字谜的函数

  • 本文向大家介绍python列表生成式与列表生成器的使用,包括了python列表生成式与列表生成器的使用的使用技巧和注意事项,需要的朋友参考一下 列表生成式:会将所有的结果全部计算出来,把结果存放到内存中,如果列表中数据比较多,就会占用过多的内存空间,可能会导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况 列表生成器:会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如

  • 本文向大家介绍PHP实现给定一列字符,生成指定长度的所有可能组合示例,包括了PHP实现给定一列字符,生成指定长度的所有可能组合示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现给定一列字符,生成指定长度的所有可能组合。分享给大家供大家参考,具体如下: 给定一列字符,生成指定长度的所有可能的组合: 如:a,b,c,d,e 或 0-9  生成长度 1:a, b, c, d, e;

  • 问题内容: 这是问题: 给定Python中的项目列表,我将如何获得这些项目的所有可能组合? 这个站点上有几个类似的问题,建议使用itertools.combine,但是仅返回我需要的一部分: 如您所见,它仅按严格顺序返回项目,而不返回(2,1),(3,2),(3,1),(2、1、3),(3、1、2),( 2,3,1)和(3,2,1)。有一些解决方法吗?我似乎什么都没想。 问题答案: 用途: 帮助:

  • 问题内容: 我正在使用Python 2.7。 我有一个清单,我想要所有可能的有序组合。 这将给出以下输出: 但是我只希望输出是与列表相同顺序的组合。例如删除,,以及因为这些都不是正确的顺序相比列表。 我想通了用这个代替: 给我我想要的输出: 但是Python中是否有任何我想要的内置方法? 问题答案: 我相信您正在寻找的是原始列表中的所有可能 片段 。您所需的输出转换成切片是这样的: 因此,您应该尝

  • 问题内容: 在Python中,我有一个n个列表的列表,每个列表具有可变数量的元素。如何创建包含所有可能排列的单个列表: 例如 我想要 注意,我事先不知道n。我以为itertools.product是正确的方法,但它需要我提前知道参数的数量 问题答案: 您不需要事先知道使用