输出是什么?为什么是[无,无,无]

时间:2019-01-25 06:53:01

标签: python

我在家庭作业文件中找到了这段代码。但是我不明白它的输出

arr = [[3,2,1], ['a','b','c'], [('do',), ['re'], 'mi']]
print([el.append(el[0] * 4) for el in arr])  # What is printed?
print(arr)

结果应为[None,None,None]

1 个答案:

答案 0 :(得分:0)

append()是一种就地修改列表的列表方法。因此a.append("foo")通过在元素末尾添加元素a来更改"foo"。这些方法不需要返回任何东西,因此不需要。

因此,如果您使用列表推导构建列表,而列表推导是使用一系列append()方法调用的返回值构造的,则将获得一系列None

如果您不想修改原始列表,可以执行类似的操作

>>> print([item + [item[0]*4] for item in arr])
[[3, 2, 1, 12], ['a', 'b', 'c', 'aaaa'], [('do',), ['re'], 'mi', ('do', 'do', 'do', 'do')]]

如果您想修改原始列表,则应该这样做

>>> for item in arr:
...     item.append(item[0]*4)
...
>>> print(arr)
[[3, 2, 1, 12], ['a', 'b', 'c', 'aaaa'], [('do',), ['re'], 'mi', ('do', 'do', 'do', 'do')]]

但是您不应该尝试同时进行这两种操作。在列表理解中使用副作用几乎总是一个坏主意。