使用不同数量的随机数创建列表

时间:2018-03-31 20:41:13

标签: python arrays python-3.x list random

我需要创建不同长度的随机数列表(0或1)。我需要长度为10个数字,20个数字等的列表,一直到500个。这就是我所拥有的:

import random
list1 = []
for x in range(10,501,10):
    list1.append(random.randint(0,1))
    print(list1)
    list1.clear()

所以我得到了50个只有一个随机数的列表。我理解range()是我的问题,因为它只是一个迭代器,所以我该怎么做才能避免编写50 for循环来获取所有这些列表?

6 个答案:

答案 0 :(得分:4)

生成50个随机数列表(没有顺序写出所有这些命令)的唯一方法是通过50个循环生成数字。在大多数编程语言中执行此操作的标准方法是使用嵌套循环。某些语言具有功能,或available libraries可以使这更容易编写和/或更有效。 Python有一个名为list comprehension的功能,可以使创建列表变得非常简单方便。

import random
[random.randint(0,1) for _ in range(10)]

它们也可以嵌套来完成你的任务。

import random
[[random.randint(0,1) for _ in range(x)] for x in range(10,501,10)]

<强>定时:

from random import randint
from timeit import timeit

def lc():
    return [[randint(0,1) for _ in range(x)] for x in range(10,501,10)]

def forloop():
    outer = []
    for x in range(10,501,10):
        inner=[]
        for _ in range(x):
            inner.append(randint(0,1))
        outer.append(inner)
    return outer

print(timeit(lc,number=100))  # 9.2758308192958
print(timeit(forloop,number=100)) # 9.44730854274725

嗯。我的印象是list comps比for循环更具速度优势。

答案 1 :(得分:2)

更有效的解决方案是使用numpy。请参阅 Why NumPy instead of Python lists?

import numpy as np

res = [np.random.randint(0, 2, x) for x in range(10, 501, 10)]

这将创建一个二进制值数组列表,其数组长度为10,20,...,490,500。

对于此任务,任何声称嵌套列表推导的高效的答案应该注意到,在这种情况下,它们比numpy慢约100倍。

<强>基准

import numpy as np
import random

def method_np():
    return [np.random.randint(0, 2, x) for x in range(10, 501, 10)]

def method_lst():
    return [[random.randint(0,1) for _ in range(x)] for x in range(10,501,10)]

%timeit method_np()    # 359 µs
%timeit method_lst()   # 37.3 ms

答案 2 :(得分:0)

您需要嵌套循环:

<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

<div class="container">
  <h2>Dynamic Tabs</h2>
  <p>To make the tabs toggleable, add the data-toggle="tab" attribute to each link. Then add a .tab-pane class with a unique ID for every tab and wrap them inside a div element with class .tab-content.</p>

  <ul class="nav nav-tabs">
    <li class="active"><a data-toggle="tab" href="#home">Home</a></li>
    <li><a data-toggle="tab" href="#menu1">Menu 1</a></li>
    <li><a data-toggle="tab" href="#menu2">Menu 2</a></li>
    <li><a data-toggle="tab" href="#menu3">Menu 3</a></li>
  </ul>

  <div class="tab-content">
    <div id="home" class="tab-pane fade in active">
      <h3>HOME</h3>
      <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
    </div>
    <div id="menu1" class="tab-pane fade">
      <h3>Menu 1</h3>
      <p>Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
    </div>
    <div id="menu2" class="tab-pane fade">
      <h3>Menu 2</h3>
      <p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam.</p>
    </div>
    <div id="menu3" class="tab-pane fade">
      <h3>Menu 3</h3>
      <p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
    </div>
  </div>
</div>

</body>
</html>

答案 3 :(得分:0)

我想这可以解决你的问题:

{{1}}

答案 4 :(得分:0)

问题: 您的代码有2个问题,第一个问题是范围(),第二个问题是print(list1) list1.clear()缩进。

固定代码:

import random
list1 = []
ranges = [10,501,10]
for y in ranges:
    for x in range(0,y):
        list1.append(random.randint(0,1))
    print(list1)
    list1.clear()

答案 5 :(得分:0)

由于您似乎只需要打印出的列表,您可以使用列表推导来生成一定长度的列表。

import random
max_list_len = 500
for l in range(1, max_list_len + 1):
    print([random.randint(0, 1) for i in range(0, l)])