如何从数组中选择随机值,然后再随机选择,排除刚才选择的值?

2024-09-25 02:35:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个独特的短语组合,使一个句子,并希望随机选择一个短语长度从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)])

Tags: 示例random句子buti3choicej1j2
2条回答

希望对你有帮助

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))

关键的想法是我们将在下一次随机测试之前删除所选的值

洗牌两个数组,然后采取你需要的元素,一个接一个。或者,如果你不想让原稿受到干扰,可以对它们进行取样:

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)

所以我先选择想要的序列。然后我计算每个列表在所选序列中出现多少次。然后,对于每个唯一的列表,我取序列中列表出现的任意多个随机元素(不重复),然后为这些选择生成一个迭代器,这样我就可以一个接一个地得到它们。剩下要做的最后一件事是遍历序列,并从适当的迭代器中获取下一个元素。你知道吗

相关问题 更多 >