【问题标题】:How can I create a random order list and including same numbers?如何创建随机订单列表并包含相同的数字?
【发布时间】:2021-10-28 03:44:10
【问题描述】:

我想创建五个随机列表,但具有相同且不重复 1-100 的数字。 我只知道我可以从列表中删除包含我想要的所有数字并随机选择放入新列表的数字:

All_list 是一个列表 我保存所有列表 我想保存 1-100 的随机数

number_list 是包含我想要的所有数字的列表,但它不是随机的

    number_list = list(range(1, 101))

    for i in range(5):
        All_list.append(list)

        for a in range(1,101):
            random_num = random.choice(number_list)
            All_list[i-1].append(random_num)
            number_list.remove(random_num)

但在:

All_list[i-1].append(random_num)

上面给出了typeError: descriptor 'append' for 'list' objects doesn't apply to a 'int' object。为什么会这样? 谁能帮我重写这段代码?我会很感激的。

【问题讨论】:

  • 欢迎来到stackoverflow。请提供minimal reproducible example 以便我们帮助您,我们必须能够重现您的问题。但是,您的示例并不完整,因为它没有显示 'All_list' 和 'number_list' 是什么。
  • 创建一个随机列表:data = random.choices(range(1,101), k=5) 并复制它。 data1 = [n for n in data]
  • @PatrickArtner 是否实现了“不重复编号”?
  • the five random list 每个列表中应该包含所有 100 个元素还是每个列表中包含 20 个元素?
  • @don'ttalk if you use random.sample() 代替 - 是的。

标签: python list random


【解决方案1】:

创建随机number列表,并将随机数分组到chunk_size大小子列表中。

import random

data = random.sample(range(1,101), 100)

chunk_size=int(len(data)/5)
_chunks=list(data [i:i+chunk_size]
                   for i in range(0, len(data ), chunk_size))

输出

[[98, 91, 87, 92, 85, 45, 3, 1, 76, 13, 11, 14, 43, 21, 42, 73, 26, 61, 63, 79], [12, 29, 2, 48, 10, 70, 30, 81, 44, 83, 49, 20, 24, 54, 77, 23, 40, 66, 32, 51], [31, 55, 9, 8, 60, 72, 19, 38, 57, 27, 68, 53, 41, 56, 35, 75, 17, 7, 64, 90], [33, 52, 71, 39, 62, 94, 16, 93, 37, 4, 99, 34, 65, 36, 58, 6, 82, 97, 88, 5], [86, 84, 78, 50, 18, 89, 59, 46, 100, 15, 47, 95, 74, 22, 67, 25, 69, 28, 80, 96]]

【讨论】:

    【解决方案2】:

    快速解决方法是,在调用 All_list.append 时,传递一个空列表 ([]),而不是 list 类。

    如果不了解有关方法如何工作的一些细节,则很难理解错误消息。由于All_list 包含list 类,以下语句:

    All_list[i-1].append(random_num)
    

    相当于:

    list.append(random_num)
    

    这会从list 类中获取append 函数,并以将random_num 视为对象而不是列表的方式调用它。 Python 看到random_num 不是定义append 的类的实例,所以它会抛出错误。

    当然,你还有另一个错误是内循环用尽了number_list。我不知道你到底想在那里做什么。

    【讨论】:

    • 非常感谢!我忘记在循环内创建 number_list。
    【解决方案3】:

    您在第 3 行的代码是问题所在,All_list.append(list)。我猜你的意思是在 All_list 中附加 number_list。

    【讨论】:

      【解决方案4】:

      嗨@Peggy Lin,欢迎来到 Stack Overflow。

      您提到的错误是由于append 函数与列表的元素一起使用,这是一个整数,除非您的意思是All_list嵌套列表。

      注意:

      您应该提供minimal-reproducible-example 以及关于您的代码到底有什么问题的明确声明,以及您打算从更正后的代码中获得的清晰示例输出。 Refer this to better your question

      请在您的问题陈述中阐明以下几点以获得更好和有用的答案:

      1. 您需要什么类型的列表?一个嵌套列表,包含 5 个以随机数作为元素的列表,还是 5 个单独的列表,每个列表都以随机元素作为元素?
      2. 但具有相同且不重复 1-100 的数字

      澄清你的意思。

      1. 我只知道我可以从列表中删除我想要的所有号码并随机选择放入新列表中的号码

      这似乎表明您已经有一个列表或者您想要生成列表然后修改它。澄清声明。

      1. number_list 的用途是什么?里面需要什么元素?

      希望这些将指导您改进您的问题!

      【讨论】:

        猜你喜欢
        • 2020-02-13
        • 2022-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-08-08
        • 2011-08-06
        • 2017-06-06
        • 2021-10-04
        • 1970-01-01
        相关资源
        最近更新 更多