Python 获取所有可能的测验答案组合

Python 获取所有可能的测验答案组合,python,list,dictionary,Python,List,Dictionary,我有一本字典,以问题为键,以答案选项列表为值 quiz = { 'Question 1': ['yes', 'no'], 'Question 2': ['dogs', 'cats'], 'Question 3': ['apples', 'oranges'] } 获取所有可能答案组合的最佳方法是什么?事实上,使用itertools.product from itertools import product quiz = { 'Question 1': ['yes', 'no

我有一本字典,以问题为键,以答案选项列表为值

quiz = {
  'Question 1': ['yes', 'no'],
  'Question 2': ['dogs', 'cats'],
  'Question 3': ['apples', 'oranges']
}

获取所有可能答案组合的最佳方法是什么?

事实上,使用
itertools.product

from itertools import product

quiz = {
    'Question 1': ['yes', 'no'],
    'Question 2': ['dogs', 'cats'],
    'Question 3': ['apples', 'oranges']
}

for responses in product(*quiz.values()):
    print(responses)

# each row is a tuple
('yes', 'dogs', 'apples')
('yes', 'dogs', 'oranges')
('yes', 'cats', 'apples')
('yes', 'cats', 'oranges')
('no', 'dogs', 'apples')
('no', 'dogs', 'oranges')
('no', 'cats', 'apples')
('no', 'cats', 'oranges')

首先,我想你指的是三个问题答案的所有八种可能的组合。其次,由于您正在列举所有可能的组合,因此在效率方面尝试优化是没有意义的-在任何情况下都需要指数时间

说到手头的主要问题,你可以简单地重复azro在另一个答案中提到的所有项目

使用位操作的一种有趣方法如下所示:

quiz = {
  'Question 1': ['yes', 'no'],
  'Question 2': ['dogs', 'cats'],
  'Question 3': ['apples', 'oranges']
}

for i in range(8):
    ans = [quiz['Question 1'][i & 1], quiz['Question 2'][int((i & 2) / 2)], quiz['Question 3'][int((i & 4) / 4)]]
    print(ans)
说明:任何答案选择的组合都可以被视为针对每个问题选择第一个选项或第二个选项。形成一个相应的位序列会导致一个介于0到7=2^3-1之间的数字

注意:这种方法的一个主要缺陷是,只有当每个问题有两个选择时,这种方法才有效。它可以用于其他变体,但仍然需要每个问题的选择数量保持一致