我试图创建一个列表,在30到35之间抽取10个随机实数,然后将它们打印出来。当我运行以下代码时,我收到以下错误:
TypeError:' float'对象不可迭代。
以下是代码:
Durbin-Watson test
data: y ~ x + x2 + x3 + x4 + x5 + x6 + x7 + x8
DW = 2.816, p-value = 1
alternative hypothesis: true autocorrelation is greater than 0
我觉得我错过了一些明显的东西。 当我在没有
的情况下运行代码时lis = list(range(10))
random.seed(70)
for i in range(0, len(lis)):
randreal = (random.random()*5 + 30)
lis = list(randreal)
print(lis)
我得到了我想要的结果,而不是列表。我也试图在没有random.uniform
的情况下这样做答案 0 :(得分:6)
你写道:
lis = list(randreal)
但是list(..)
在这里是一个构造函数。构造函数查找可以转换为列表的可迭代对象(另一个列表,集合,字典,生成器等)。浮点不可迭代,因此无法为其构造列表。因此会出错。
解决问题的一种方法是分配到列表lis
的索引:
lis = [0] * 10
random.seed(70)
for i in range(0, len(lis)):
randreal = (random.random()*5 + 30)
lis[i] = randreal # assign to an index
print(lis)
但这仍然不是很优雅:你首先构建一个列表,然后再修改它。您可以通过绘制 10 元素并且每次.append(..)
到列表来改进代码:
lis = []
random.seed(70)
for i in range(0,10):
randreal = (random.random()*5 + 30)
lis.append(randreal) # append to the list
print(lis)
这已经更好了,但仍然是很多代码,所以我们可以使用 list comprehension 来使它更具说明性:
random.seed(70)
lis = [random.random()*5 + 30 for _ in range(10)]
print(lis)
答案 1 :(得分:3)
您首先创建了列表lst
[0,1,2,3,4,5,6,7,8,9]。这是不必要的。然后你试图用新列表lst
覆盖这个列表list(randreal)
,这会引发错误,因为它是无效的列表构造函数
您可以从空列表开始,并附加您创建的每个随机数:
lis = []
random.seed(70)
for i in range(10):
randreal = (random.random()*5 + 30)
lis.append(randreal)
print(lis)
或用新的随机值
覆盖原始列表的每个值lis = list(range(10))
random.seed(70)
for i in range(0, len(lis)):
randreal = (random.random()*5 + 30)
lis[i] = randreal
print(lis)