繁体   English   中英

创建列表时语法无效

[英]Invalid syntax when creating lists

因此,我试图创建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])
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不是您想要下标的对象的名称。

以下在我的系统上工作正常。

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 < - 在这里试试吧。

我可能会这样做

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]

更短的版本是:

>>> import random
>>> def create_list(length):
...     return [random.randint(1,1000000) for _ in range(length)]

这表明了一些事情:

  1. 循环x次的更紧凑的方法( for _ in range(length) idiom)
  2. 列表推导创建列表,而不是重复调用append
  3. 当您需要变量时,使用_作为变量名,而不是其中的实际数据。 这是一种常见的惯例,在列表推导中最常出现。 不使用它不是一个问题,但它经常出现足以让人意识到它。

给@mgilson提示他对另一个答案的评论,这个答案让我想起了_惯例。

使用列表理解(它的方式betta,让你看起来亲,哈哈)

[random.randint(1, 1000000) for i in range(10000)]

正如其他一些答案所述,你可以轻松地将列表理解用于这样的事情(所谓的Pythonic方式):

somelist = [random.randint(1, 1000000) for i in xrange(10000)]

列表理解在Python中很快,因为它由底层C代码执行。 而且,使用xrange可以提高内存效率。

注意:按照惯例,当Python中没有使用循环控制变量时,它被命名为_

somelist = [random.randint(1, 1000000) for _ in xrange(10000)]

首先,除非您正在评估复杂的表达式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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM