1

我需要在一行代码中创建一个列表,其中 n 个索引为 1,后跟 10 个全部(必须在一行中在线提交)。我试过(n*[1]).append(10)了:但这会返回 None 类型。这是可行的吗?谢谢。

4

5 回答 5

6

尝试以下操作:

n*[1] + [10]
于 2013-09-20T22:52:43.780 回答
6

导致副作用的 Python 方法(阅读:改变对象)通常评估为None- 这是为了强化它们存在导致此类副作用的事实(阅读:对象突变)。list.append就是这种模式的一个例子(尽管另一个很好的例子是list.sortvs 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 回答