如何将索引1的元素转换为嵌套列表中的upper()?

时间:2018-07-24 20:02:26

标签: python python-3.x

如何仅使用列表理解将内部列表中索引1处的每个元素转换为upper()。

#include

3 个答案:

答案 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)