所以我试图创建3个不同的列表中的一个,1k,10k中的一个,以及100k项目中的一个,其中填充了1到1000万的随机数,但我似乎无法弄清楚为什么它一直说它的无效语法。到目前为止我有:
编辑:好吧,似乎已经通过一些调整修复了无效的语法问题,但仍然给了我:
Traceback (most recent call last):
File "C:/Python32/funtime.py", line 16, in <module>
print (list[1])
TypeError: 'type' object is not subscriptable
这正是我输入的内容:
import random
def createlist(a):
blist =[]
count=0
while count <= a:
blist.append(random.randint(1,10000000))
count= count+1
return blist;
list1= createlist(10000);
print (list[1])
答案 0 :(得分:3)
Traceback (most recent call last):
File "C:/Python32/funtime.py", line 16, in <module>
print (list[1])
TypeError: 'type' object is not subscriptable
type
类型的对象确实不可订阅。 list
是内置列表类的名称,它是type
的实例。下标它没有任何意义,所以这显然不是你打算做的。
你的意思是print (list1[1])
。 list1
是您绑定到createlist(10000)
创建的列表对象的名称。
找到这些错误的诀窍是查看Python给你的错误消息。它告诉你确切的问题,以及它为什么是一个问题。所有缺失的是认识到list
不是您想要下标的对象的名称。
答案 1 :(得分:2)
以下在我的系统上运行正常。
import random
def createlist(a):
blist =[]
count= 0
while count <= a:
blist.append(random.randint(1,1000000))
count=count+1
return blist
list1= createlist(10000)
print list1[1]
http://ideone.com/SL2bL&lt; - 在这里试试。
我可能会这样做
import random
def createlist(a):
return [random.randint(1,1000000) for i in xrange(a)]
list1= createlist(10000)
print list1[1]
或者可能只是跳过这个功能..
list1 = [random.randint(1,1000000) for i in xrange(a)]
print list1[1]
答案 2 :(得分:2)
更短的版本是:
>>> import random
>>> def create_list(length):
... return [random.randint(1,1000000) for _ in range(length)]
这表明了一些事情:
x
次(for _ in range(length)
成语)append
。_
作为变量名称。这是一种常见的惯例,在列表推导中最常出现。不使用它不是一个问题,但它经常出现足以让人意识到它。向@mgilson提示他对另一个答案的评论,这个答案提醒了我_
惯例。
答案 3 :(得分:1)
使用列表理解(它的方式betta,让你看起来亲,哈哈)
[random.randint(1, 1000000) for i in range(10000)]
答案 4 :(得分:1)
正如其他一些答案所述,您可以轻松地使用list comprehension这样的东西(所谓的 Pythonic 方式):
somelist = [random.randint(1, 1000000) for i in xrange(10000)]
列表理解在Python中很快,因为它由底层C代码执行。此外,使用xrange
可以提高内存效率。
注意:按照惯例,当Python中没有使用循环控制变量时,它被命名为_
:
somelist = [random.randint(1, 1000000) for _ in xrange(10000)]
答案 5 :(得分:-1)
首先,除非您正在评估复杂的表达式,否则不要按while
放置paren。
接下来,您使用分号返回blist
。没必要。
最后......为什么不使用for循环?
import random
def createlist(a):
blist =[]
for x in xrange(a):
blist.append(random.randint(1,1000000))
return blist
list1= createlist(10000)
print list1[0]