Python列表中的常量值

14

我真的很喜欢Python的缩写循环,但有时候,我需要获得一个包含多个相同值的列表,我是用以下方式实现的:

plot(seconds, [z0 for s in seconds], '--')

但是那个未使用的s因为美观原因让我感到不安。

有没有更短(而且更美观)的方法?比如某些特殊的值的“乘法”?


6
你可以对列表进行乘法运算:[1] * 3 -> [1, 1, 1] - Marius
3
未使用变量的通常命名方式是 _,除非你可以将其删除。 - njzk2
有时候,“_”用于本地化字符串...而其他时候它是Python shell提供的自动填充上下文变量... - Joran Beasley
1
@njzk2 和 @Joran:我一直看到双下划线 __ 被用作“垃圾”变量,特别是为了避免与单下划线 _ 的其他用途冲突,例如交互式解释器和 gettext 模块。此外,虽然前导下划线使其对 from <module> import * 不可见,但它的长度不足以触发类私有名称重整 - Kevin J. Chase
3个回答

29

你的意思是这样的:

[z0] * len(seconds)

2
我完全不知道这是个事情... 是时候回到基础了。 - Adam Hughes
1
@AdamHughes 正如Joran Beasley在他的回答中所说,该列表是对同一对象的多个引用。因此,如果该对象可以被改变(比如列表或字典),那么对一个元素的更改将反映在每个其他元素上(因为它们是同一对象)。然而,如果该对象是不可变的(比如字符串、数字或元组),那么这是安全的。 - Dunes
谢谢你指出来,我完全没有意识到。 - Adam Hughes
哇!谁会想到呢。 - Krish Srinivasan

8
根据z0的不同,执行不同的操作。
 [z0]*len(seconds)

提前警告:如果z0是可变数据类型,那么它将不能按照您的期望工作。


1

我觉得你现在的做法并不算很糟糕... 但是numpy.fill函数更加整洁:

In [4]: import numpy as np
In [5]: x=np.empty(5)

In [6]: x.fill(8)

In [7]: x
Out[7]: array([ 8.,  8.,  8.,  8.,  8.])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接