我需要在一行代码中创建一个列表,其中 n 个索引为 1,后跟 10 个全部(必须在一行中在线提交)。我试过(n*[1]).append(10)
了:但这会返回 None 类型。这是可行的吗?谢谢。
问问题
80 次
5 回答
6
尝试以下操作:
n*[1] + [10]
于 2013-09-20T22:52:43.780 回答
6
导致副作用的 Python 方法(阅读:改变对象)通常评估为None
- 这是为了强化它们存在导致此类副作用的事实(阅读:对象突变)。list.append
就是这种模式的一个例子(尽管另一个很好的例子是list.sort
vs sorted
)。
将问题中的用法与:
l = n * [1]
l.append(10) # returns None ..
print l # .. but list was mutated
于 2013-09-20T22:57:33.610 回答
1
或者,使用列表推导
n=10
[1 if i < n else 10 for i in range(n+1)]
#or a map (although depending on python version it may return a generator)
map(lambda x:1 if x < n else 10,range(n+1))
于 2013-09-20T23:10:49.597 回答
1
它很简单:
[1] * n + [10]
于 2013-09-20T22:56:59.847 回答
0
关于什么:
[1 for _ in range(n)] + [10]
我没有使用该n * [1] + [10]
方法的原因不仅是因为它已经提交了,还因为在您要在列表中传播的对象是可变的情况下;例如,您想创建一个列表n
列表。如果使用该n * [1] + [10]
方法,列表中的每个列表都将引用同一个列表。因此,当您仅对其中一个列表进行操作时,所有其他列表也会受到影响。
例子
>>> list_of_lists = [[]] * 10
>>> list_of_lists[0].append(9)
>>> print list_of_lists
输出:
[[9], [9], [9], [9], [9], [9], [9], [9], [9], [9]]
请参阅此问题以了解为什么会发生这种情况
于 2013-09-20T23:28:13.347 回答