Python 创建列表时语法无效
因此,我试图创建3个不同的列表,一个是1k,一个是10k,还有一个是100k项中的一个,这些项中长期填充着从100万到1000万的随机数,但我似乎无法理解为什么它总是说它的语法无效。到目前为止,我已经: 编辑:好的,它似乎通过一些调整修复了无效语法问题,但仍然给了我: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])
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
作为变量名。这是在列表理解中最常见的一种惯例。不使用它不是一个问题,但它的出现频率足够高,需要注意
惯例。使用列表理解(这是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