我需要创建一个n个索引为1的列表,然后在一行代码中创建一个10(它必须在一行上在线提交)。我试过:(n*[1]).append(10)
但是返回一个None类型。这可行吗?感谢。
答案 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了解这种情况发生的原因