我在我的作业文件中发现了这段代码。但是我不能理解它的输出
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
发布于 2019-01-25 14:58:07
append()是一种list方法,可以就地修改list。因此,a.append("foo")通过在末尾添加元素"foo"来更改a。这些方法不需要返回任何内容,所以它们不需要。
因此,如果使用使用一系列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')]]但是你不应该同时做这两件事。在列表理解中使用副作用几乎总是一个坏主意。
https://stackoverflow.com/questions/54360307
复制相似问题