python生成指定长度的列表_如何在python中创建固定大小列表?

 2023-09-07 阅读 28 评论 0

摘要:(tl;博士:您问题的确切答案是numpy.empty_like或x = list(size=10000),但您可能不在乎,可以使用myList = [None]*10000逃脱。) 简单的方法 您可以将列表初始化为所有相同的元素。 使用非数字值在语义上是否有意义(如果

(tl;博士:您问题的确切答案是numpy.empty_like或x = list(size=10000),但您可能不在乎,可以使用myList = [None]*10000逃脱。)

简单的方法

您可以将列表初始化为所有相同的元素。 使用非数字值在语义上是否有意义(如果以后使用它会产生错误,这是一件好事),或者使用0(不寻常?如果正在编写稀疏矩阵或' 默认值应为0,并且您不必担心错误)由您自己决定:

>>> [None for _ in range(10)]

python创建长度为20的列表、[None, None, None, None, None, None, None, None, None, None]

(这里numpy.empty_like只是一个变量名,您可以使用x = list(size=10000)。)

您也可以这样:

>>> [None]*10

[None, None, None, None, None, None, None, None, None, None]

python创建指定长度list?您可能不需要优化它。 您还可以在每次需要时追加到数组:

>>> x = []

>>> for i in range(10):

>>> x.append(i)

简单方法的性能比较

Python输出字符串长度?哪个最好?

>>> def initAndWrite_test():

... x = [None]*10000

... for i in range(10000):

... x[i] = i

python生成指定长度的数组,...

>>> def initAndWrite2_test():

... x = [None for _ in range(10000)]

... for i in range(10000):

... x[i] = i

Python 列表长度、...

>>> def appendWrite_test():

... x = []

... for i in range(10000):

... x.append(i)

python爬虫教程,python2.7中的结果:

>>> import timeit

>>> for f in [initAndWrite_test, initAndWrite2_test, appendWrite_test]:

... print('{} takes {} usec/loop'.format(f.__name__, timeit.timeit(f, number=1000)*1000))

...

python随机生成字符串、initAndWrite_test takes 714.596033096 usec/loop

initAndWrite2_test takes 981.526136398 usec/loop

appendWrite_test takes 908.597946167 usec/loop

python 3.2中的结果:

initAndWrite_test takes 641.3581371307373 usec/loop

initAndWrite2_test takes 1033.6499214172363 usec/loop

appendWrite_test takes 895.9040641784668 usec/loop

如我们所见,最好在python2和python3中都使用成语numpy.empty_like。 但是,如果执行的工作比分配还要复杂(例如,要生成或处理列表中的每个元素都比较复杂),那么开销将占成本的一小部分。 也就是说,如果您对列表中的元素做任何合理的事情,这种优化还为时过早。

未初始化的内存

但是这些都是低效的,因为它们要经过内存,在过程中写一些东西。 在C语言中这是不同的:未初始化的数组中充满了随机垃圾存储器(注:已从系统中重新分配,并且当您分配内存或在关闭程序时无法锁死和/或无法删除内存时可能存在安全风险 )。 这是设计用于提高速度的选择:C语言的开发人员认为最好不要自动初始化内存,这是正确的选择。

这不是渐近加速(因为它是numpy.empty_like),但是例如,您不需要先初始化整个内存块,然后再覆盖实际关心的内容。 如果可能,这等效于(伪代码)x = list(size=10000)。

如果要在python中使用类似的东西,可以使用numpy.empty_like数字矩阵/ N维数组操作包。 具体来说是numpy.empty_like或numpy.empty_like

那是您问题的真正答案。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/17989.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息