我需要创建不同长度的随机数列表(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循环来获取所有这些列表?
答案 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)])