Python 创建列表时语法无效

Python 创建列表时语法无效,python,list,Python,List,因此,我试图创建3个不同的列表,一个是1k,一个是10k,还有一个是100k项中的一个,这些项中长期填充着从100万到1000万的随机数,但我似乎无法理解为什么它总是说它的语法无效。到目前为止,我已经: 编辑:好的,它似乎通过一些调整修复了无效语法问题,但仍然给了我: Traceback (most recent call last): File "C:/Python32/funtime.py", line 16, in <module> print (list[1])

因此,我试图创建3个不同的列表,一个是1k,一个是10k,还有一个是100k项中的一个,这些项中长期填充着从100万到1000万的随机数,但我似乎无法理解为什么它总是说它的语法无效。到目前为止,我已经:

编辑:好的,它似乎通过一些调整修复了无效语法问题,但仍然给了我:

Traceback (most recent call last):
  File "C:/Python32/funtime.py", line 16, in <module>
    print (list[1])
TypeError: 'type' object is not subscriptable
回溯(最近一次呼叫最后一次):
文件“C:/Python32/funtime.py”,第16行,在
打印(列表[1])
TypeError:“type”对象不可下标
这正是我输入的内容:

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])
随机导入
def createlist(a):
blist=[]
计数=0

当count时,以下各项在我的系统上运行良好

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]
或者干脆跳过这个函数

list1 = [random.randint(1,1000000) for i in xrange(a)]
print list1[1]

首先,除非要计算复杂表达式,否则不要在
时按放置参数

接下来,使用分号返回
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]

短得多的版本是:

>>> import random
>>> def create_list(length):
...     return [random.randint(1,1000000) for _ in range(length)]
这说明了两件事:

  • 循环
    x
    次的一种更为简洁的方法(范围(长度)惯用用法)
  • 创建列表,而不是重复调用
    append
  • 当您需要变量而不是其中的实际数据时,使用
    \uu
    作为变量名。这是在列表理解中最常见的一种惯例。不使用它不是一个问题,但它的出现频率足够高,需要注意
  • @mgilson对另一个答案的评论让我想起了
    惯例。

    使用列表理解(这是betta让你看起来很专业的方式,哈哈)


    正如其他一些答案所述,您可以很容易地使用以下方法(所谓的Pythonic方法):

    在Python中,列表理解速度很快,因为它是由底层C代码执行的。此外,使用
    更节省内存

    注意:按照惯例,当循环控制变量未在Python中使用时,它将被命名为
    \uuu

    somelist = [random.randint(1, 1000000) for _ in xrange(10000)]
    
    回溯(最近一次呼叫最后一次):
    文件“C:/Python32/funtime.py”,第16行,在
    打印(列表[1])
    TypeError:“type”对象不可下标
    
    类型为
    类型的对象实际上是不可下标的<代码>列表
    是内置列表类的名称,它是
    类型
    的一个实例。下标它没有任何意义,所以这显然不是你想要做的

    你的意思是打印(列表1[1])
    list1
    是绑定到列表对象的名称,该列表对象由
    createlist(10000)
    创建



    找到这类bug的诀窍是查看Python给您的错误消息。它准确地告诉了你问题线,以及问题的原因。所缺少的只是认识到
    list
    不是您想要下标的对象的名称。

    什么语言?它在哪里说语法错误?(哪一行?),因为
    list
    是一种类型,而变量的名称是list1,为什么我需要检查count而不是a?我只是用随机数来填充列表,它通过计算a来设置列表的长度,a是我传递给它的长度。我认为更好的问题是为什么我要在一段时间内使用for循环?我在编辑之前写过,当您在函数中显示
    a
    作为参数时。至于
    for
    循环,您可以放弃使用的计数器变量,因为
    for
    循环管理自己的哨兵。“for”循环通常用于设定的迭代次数。While循环通常在等待一个不确定的条件。在
    While
    上加括号不是无效的语法。试试这个:
    while(True):打印1
    。你说得对。OP并没有抱怨某个具体的错误,我没有仔细看,就跳到了我眼睛抱怨的第一件事上。完全正确的过程,关于让人们用python编写正确的代码,我认为您忘记了删除代码第二部分中的
    count=count+1
    。没有必要编写这样的函数。我建议在这里使用xrange而不是range。你不需要它生成一个巨大的列表来迭代。@zinking在这种情况下是这样的,但是工厂函数的基本思想没有什么错。这完全可能是一个简化的情况,它减少了原始函数所做的一些无关的额外工作。@desimusxvii我考虑过这一点,但趋势是使用
    range
    ,因为在Python 3中
    xrange
    被重构为
    range
    ,许多库维护人员更喜欢在同一个代码库中同时支持2和3。显然,如果您将其用于庞大的列表,您可能还是希望使用
    xrange
    。我可以发誓有一种方法可以让itertools在这里完成繁重的工作,但我现在已经很晚了,我快速扫描的文档没有显示出来。@HankGay我没有意识到这一点。在这种情况下,Thank.xrange比range更可取。@desimusxvii只有在使用python2.x的情况下——并且根据
    print(列表[1])
    中的括号,OP可能不是。“C:/Python32/funtime.py”强烈建议它是3.2。对于范围内的10000),我将它改为
    [random.randint(11000000)]
    因为您没有实际使用变量
    i
    。(
    \uuu
    是一个常见的变量名,用于你需要使用语法的东西,但你实际上不需要使用数据)@DSM——抱怨总是让我看起来很糟糕,因为我注意到了这些我完全没有注意到的小细节…:^)据我所知,这是唯一一个能真正解释问题的答案
    [random.randint(1, 1000000) for i in range(10000)]
    
    somelist = [random.randint(1, 1000000) for i in xrange(10000)]
    
    somelist = [random.randint(1, 1000000) for _ in xrange(10000)]
    
    Traceback (most recent call last):
      File "C:/Python32/funtime.py", line 16, in <module>
        print (list[1])
    TypeError: 'type' object is not subscriptable