我正在尝试创建唯一短语的组合来构成一个句子,并希望从S中随机选择一个短语长度(只需要发生1次),然后首先随机选择一个J值,然后随机选择一个Q值,但我不想从J或S中选择相同的值。我该怎么办?
以下是一些示例输出的样子:
I3和I1 I4不是I5 I5或I4,I3不是I3
Q=("but","why","okay")
J=("J1","J2","J3","J4","J5")
S=[(J), (J,Q,J), (J,Q,J,Q,J),(J,Q,J,Q,J,Q,J)]
' '.join([random.choice(i) for i in random.choice(S)])
答案 0 :(得分:1)
将两个数组随机排列,然后根据需要采用元素,一个接一个。如果您不想干扰原件,请尝试以下方法:
Q=("but","why","okay")
J=("J1","J2","J3","J4","J5")
S=[(J,), (J,Q,J), (J,Q,J,Q,J), (J,Q,J,Q,J,Q,J)]
from random import sample, choice
from collections import Counter
seq = choice(S)
iters = { s: iter(sample(s, c)) for s, c in Counter(seq).items() }
result = ' '.join(next(iters[s]) for s in seq)
所以我首先选择所需的序列。然后,我计算每个列表按所选顺序出现多少次。然后,对于每个唯一列表,我将选择与列表中出现的序列一样多的随机元素(无重复),然后为这些选择进行迭代,这样我就可以一一获得。剩下要做的最后一件事是迭代序列,并从适当的迭代器中获取下一个元素。
答案 1 :(得分:0)
我希望对您有帮助
result = []
temp = S
while temp is not empty:
random1 = random.choice(temp)
value = random.choice(random1)
result.append(value)
temp2 = random1.remove(value)
temp = temp.remove(random1)
if temp2 is not empty:
temp = temp.append(temp2)
print(' '.join(result))
关键思想是我们将在下一个随机变量之前删除所选值