我在家庭作业文件中找到了这段代码。但是我不明白它的输出
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]
答案 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')]]
但是您不应该尝试同时进行这两种操作。在列表理解中使用副作用几乎总是一个坏主意。