从列表中随机选择一对不同的项目

Lea*_*ava 5 python random list python-2.7

码:

import random

x = ['A','B','C','D','E','F',
     'G','H','I','J','K','L',
     'M','N','O','P','Q','R',
     'S','T','U','V','W','X',
     'Y','Z']

y1 = random.sample(x, 2)
y2 = random.sample(x, 2)
y3 = random.sample(x, 2)
y4 = random.sample(x, 2)
y5 = random.sample(x, 2)
Run Code Online (Sandbox Code Playgroud)

询问

如上所示,我选择5个随机样本组合,并在变量下声明它们y'x'

为了改善我的代码,我想这样做,但是要确保列表中的项目在所有变量输出中出现的次数都不会超过一次,在这些变量输出中,所有组合都是不同且非重复的。我最好实现此目的而不必从列表中删除项目,因为它稍后会在代码中重用。

预期输出(示例):

>>> y1
['A', 'Q']
>>> y2
['E', 'K']
>>> y3
['C', 'O']
>>> y4
['Z', 'X']
>>> y5
['P', 'L']
Run Code Online (Sandbox Code Playgroud)

MSe*_*ert 5

您可以随机播放列表的副本(您说过您想重复使用它,因此需要进行复制,因为随机播放可以就地进行),然后每个样本仅包含2个元素:

import random

x_copy = x[:]  # copy
random.shuffle(x_copy)
y1 = x[:2]
y2 = x[2:4]
y3 = x[4:6]
y4 = x[6:8]
y5 = x[8:10]
Run Code Online (Sandbox Code Playgroud)

或者,如果您不想对进行硬编码yi

x_copy = x[:]  # copy
random.shuffle(x_copy)
y = [x_copy[i*2: (i+1)*2] for i in range(5)]
print(y)
# [['W', 'Z'], ['A', 'Q'], ['B', 'J'], ['O', 'D'], ['X', 'E']]
Run Code Online (Sandbox Code Playgroud)