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

如何在python中从已排序的组中随机挑选数字,以创建特定长度的列表

方宏富
2023-03-14

我试图创建一个长度为6的序列,它由从排名组中随机抽取的数字组成。序列的第一个元素必须从第一组中抽取,最后一个元素必须从最后一组中抽取。

让新的序列称为“seq”。那么,如果

a = [1,2,3]
b = [9]
c = [5,6]
d = [11,12,4]

seq[0] in a == 1
seq[-1] in d == 1

中间元素必须来自列表a、b、c、d。但是,如果第二个元素是从“a”中随机抽取的,那么第三个元素必须从后面的“a”元素或b/c/d中抽取。类似地,如果第三个元素是从“c”中抽取的,那么其他元素必须来自更高的级别,如d。这些组是这样排列的。

现在给出的组数是任意的(最多6组)。序列的长度(len(seq) == 6)是标准的。

每组中的一个元素必须在最终序列中。不允许元素重复。所有组元素都是唯一的(并且它们总是1-12范围内的数字)。

共有3个答案

裴曜灿
2023-03-14

试试z=[a, b, c, d]

然后,对于 z 中的每个元素 e,请执行 seq.append(e[randint(0,Len(e))]),例如

from random import randint

a=[1,2,3]
b=[4,5,6]
z=[a,b]
print(a[randint(0,len(a))])
f=[]
for e in z:
    f.append(e[randint(0,len(e))])
print(f)

或者您可以使用for循环而不是for each,并使用手动计数器,这样就可以使seq[counter]=。。。

但这不会随机选取组。

蒋原
2023-03-14

这个怎么样:

from random import choice, randint

v = [[1, 2, 3],
      [9],
      [5, 6],
      [11, 12, 4]]


def whatever(values, n=6):
    first = [choice(values[0])]
    last = [choice(values[-1])]
    seq = []
    k = 0
    while len(seq) < n -2:
        k = randint(k, len(values)-1)
        seq.append(choice(values[k]))
    return first + seq + last

print whatever(v, 6)
边健
2023-03-14

你有四个强制选择,然后是两个自由选择。set在这里有很好的帮助。

from random import choice
a = [1,2,3]
b = [9]
c = [5,6]
d = [11,12,4]

l=a+b+c+d #ordered candidates

def select():
    e=set(l)
    for s in (a,b,c,d,e,e):              # 4 forced choices and 2 frees.
        e.remove(choice(tuple(s)))       # sets have no index.
    return [x for x in l if x not in e]

10个样本:

>>> for _ in range(10) : print (select())
[1, 9, 5, 11, 12, 4]
[1, 3, 9, 6, 11, 4]
[1, 3, 9, 5, 6, 12]
[1, 2, 9, 6, 11, 4]
[1, 2, 9, 5, 6, 4]
[2, 9, 5, 6, 11, 4]
[1, 2, 9, 5, 11, 12]
[1, 3, 9, 6, 11, 12]
[3, 9, 6, 11, 12, 4]
[1, 2, 9, 5, 12, 4]
 类似资料:
  • 问题内容: 假设我需要一个3位数的电话号码,因此它类似于: 问题答案: 要获得一个随机的3位数字: (假设您实际上是指三位数,而不是“最多三位数”。) 要使用任意数量的数字: 输出:

  • 我如何创建一个懒散的随机数序列? 执行它将引发异常: (线程“main”clojure.lang.arityException中的异常:传递给:USER$random-numbers$fn at clojure.lang.afn.throwarity(afn.java:437)at clojure.lang.afn.invoke(afn.java:39)at clojure.core$iterat

  • 问题内容: 我想创建一个随机的整数列表以进行测试。数字的分布并不重要。唯一要数的是 时间 。我知道生成随机数是一项耗时的任务,但是必须有更好的方法。 这是我当前的解决方案: v2比v1快,但无法大规模使用。它给出以下错误: ValueError:样本大于总体 是否有一个快速,有效的解决方案能够在这种规模上工作? 答案的一些结果 安德鲁的:0.000290962934494 咬人:0.0058455

  • 问题内容: 我想生成一组x个唯一的随机数,并在Python中对其进行排序。例如:range(1000,10000)x = 100 我想出了导入随机数并使用random.randrange方法,然后循环获取100个随机数,最后对它们进行排序。 但是,我不知道如何获得唯一的数字(这样就不会重复)-我应该验证每个循环吗?还是还有其他更简单的方法呢?我应该如何对它们进行排序? 问题答案: 采用 排序部分很

  • 问题内容: 我有一个字节数组,固定长度为4。 我需要将每个字节设置为随机字节。如何以最有效的方式这样做?就我而言,这些方法没有提供随机字节功能。 也许有一种内置的方式,还是我应该生成一个随机字符串并将其转换为字节数组? 问题答案: 包兰特 func Read 读取从默认源生成len(p)个随机字节,并将它们写入p。它总是返回len(p)和nil错误。 f unc(* Rand)读 读取生成len(

  • stackoverflow社区, 给定数字的数字可以交换。在一个序列中,同一个数字只能使用一次(例如20和02、15和51,它们只能在一个序列中使用一次)好吧,我尝试了几个代码组合,但没有一个成功。。。