如何仅使用列表理解将内部列表中索引1处的每个元素转换为upper()。
#include
答案 0 :(得分:3)
只需将列表的其他部分缝合在一起,以确保所有元素都在列表中。
[[x[0], x[1].upper()] + x[2:] for x in ed_sheeran]
答案 1 :(得分:3)
仅枚举子列表,如果索引值为1,则将单个元素更改为上
[[y.upper() if i==1 else y for i,y in enumerate(x)] for x in ed_sheeran]
答案 2 :(得分:2)
.upper()
将返回一个新字符串,而不是就位更新-另一方面,归因语句=
并不打算在诸如列表推导之类的表达式中使用。
但是,如果一个人调用列表上的__setitem__
方法(通常由=
完成),则可以在表达式中替换列表元素。如果不想通过直接调用dunder __setitem__
方法来“看起来干净”,则可以使用operator.setitem
作为表达式:
from operator import setitem
ed_sheeran = [setitem(part, 1, part[1].upper()) for part in ed_sheeran ]
或者,如果您希望不导入setitem
:
ed_sheeran = [part.__setitem__(1, part[1].upper()) for part in ed_sheeran]
实际上,这是就地完成的,因此您甚至不需要重新分配外列表-尽管如果您不想在内存中创建新列表并使用生成器表达式,则需要“消耗”发电机。在这种情况下,内置的“ any”是一个不错的选择:
any(part.__setitem__(1, part[1].upper()) for part in ed_sheeran)
(这仅是因为__setitem__
返回None)