gpt4 book ai didi

python - 附加到范围函数

转载 作者:太空宇宙 更新时间:2023-11-03 12:21:13 24 4
gpt4 key购买 nike

编辑:感谢您对如何完成我正在尝试做的事情的友好回复,但问题是关于为什么 range().append() 返回如果您一步尝试,则没有,为什么如果您分两步执行该过程,它会起作用。

我正在尝试创建一个数字列表,但有点曲折。我不想在列表的开头有几个数字:

mlist = [0, 5, 6, 7, ...]

所以我想做以下事情:

 mlist = range(5,n+1).append(0)

但默默地失败了,因为 type(mlist) 之后等于 NoneType ?! (相关:type(range(5,10) 评估为 list 类型)

如果我尝试分两步完成,例如:

>>> mlist = range(5,10)
#and then
>>> mlist.append(0)
>>> mlist
[5, 6, 7, 8, 9, 10, 0]

发生了什么事?

最佳答案

list.append() 改变列表就地,并返回None。通过分配,您将该返回值分配给了 mlist,而不是您想要构建的列表。这是标准的 Python 习语;改变可变对象的方法永远不会返回改变后的对象,总是返回 None

将两个步骤分开:

mlist = range(5, n + 1)
mlist.append(0)

这会将 [0] 添加到 end;如果您需要 0 开头,请使用:

mlist = [0] + range(5, n + 1)

或者您可以使用 list.insert(),再次作为单独的调用:

mlist = range(5, n + 1)
mlist.insert(0, 0)

但后者必须将所有元素向上移动一步并且通过连接创建新列表是较短列表的更快选择,插入在较长列表上获胜:

>>> from timeit import timeit
>>> def concat(n):
... mlist = [0] + range(5, n)
...
>>> def insert(n):
... mlist = range(5, n)
... mlist.insert(0, 0)
...
>>> timeit('concat(10)', 'from __main__ import concat')
1.2668070793151855
>>> timeit('insert(10)', 'from __main__ import insert')
1.4820878505706787
>>> timeit('concat(1000)', 'from __main__ import concat')
23.53221583366394
>>> timeit('insert(1000)', 'from __main__ import insert')
15.84601092338562

关于python - 附加到范围函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com