创建一个包含n个整数后跟整数的列表

时间:2013-09-20 22:50:10

标签: python

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

5 个答案:

答案 0 :(得分:6)

尝试以下方法:

n*[1] + [10]

答案 1 :(得分:6)

导致副作用的Python方法(读取:改变对象)经常评估为None - 这是为了强化它们存在导致这种副作用的事实(读取:对象突变)。 list.append就是这种模式的一个例子(尽管另一个很好的例子是list.sort vs sorted)。

将问题中的用法与:

进行比较
l = n * [1]
l.append(10)   # returns None ..
print l        # .. but list was mutated

答案 2 :(得分:1)

这很简单:

[1] * n + [10]

答案 3 :(得分: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))

答案 4 :(得分: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]]

请参阅this question了解这种情况发生的原因