Python 如何将索引1处的元素转换为嵌套列表中的upper()?
如何仅使用列表理解将内部列表中索引1处的每个元素转换为上限Python 如何将索引1处的元素转换为嵌套列表中的upper()?,python,python-3.x,Python,Python 3.x,如何仅使用列表理解将内部列表中索引1处的每个元素转换为上限 ed_sheeran = [ [j.upper() for j[1] in i ] for i in ed_sheeran ] # My code but not working. ed_sheeran = [[' ', 'w', 'h', 'i', 't', 'e', ' ', 'l', 'i', 'p', 's', ',', ' ', 'p', 'a', 'l', 'e', ' ', 'f', 'a', 'c', 'e', '
ed_sheeran = [ [j.upper() for j[1] in i ] for i in ed_sheeran ] # My code but not working.
ed_sheeran = [[' ', 'w', 'h', 'i', 't', 'e', ' ', 'l', 'i', 'p', 's', ',', ' ', 'p', 'a', 'l', 'e', ' ', 'f', 'a', 'c', 'e', ' '], [' ', 'b', 'r', 'e', 'a', 't', 'h', 'i', 'n', 'g', ' ', 'i', 'n', ' ', 's', 'n', 'o', 'w', 'f', 'l', 'a', 'k', 'e', 's', ' '], [' ', 'b', 'u', 'r', 'n', 't', ' ', 'l', 'u', 'n', 'g', 's', ' ', 's', 'o', 'u', 'r', ' ', 't', 'a', 's', 't', 'e', ' ']]
for i in ed_sheeran:
i[1] = i[1].upper()
print(ed_sheeran)
Output:
[[' ', 'W', 'h', 'i', 't', 'e', ' ', 'l', 'i', 'p', 's', ',', ' ', 'p', 'a', 'l', 'e', ' ', 'f', 'a', 'c', 'e', ' '], [' ', 'B', 'r', 'e', 'a', 't', 'h', 'i', 'n', 'g', ' ', 'i', 'n', ' ', 's', 'n', 'o', 'w', 'f', 'l', 'a', 'k', 'e', 's', ' '], [' ', 'B', 'u', 'r', 'n', 't', ' ', 'l', 'u', 'n', 'g', 's', ' ', 's', 'o', 'u', 'r', ' ', 't', 'a', 's', 't', 'e', ' ']]
只需将列表的其他部分缝合在一起,确保所有元素都在列表中
[[x[0], x[1].upper()] + x[2:] for x in ed_sheeran]
只需枚举子列表,如果索引值为1,则将单个元素更改为上限
[[y.upper() if i==1 else y for i,y in enumerate(x)] for x in ed_sheeran]
.upper将返回一个新字符串,而不是就地更新它-另一方面,attribute语句=不用于诸如列表理解之类的表达式中
但是,如果调用列表上的uuu setitem_uuuu方法(通常由=)可以在表达式中替换列表元素。如果希望通过不直接调用dunder u_setitem __; methos来保持整洁,可以使用operator.setitem作为表达式:
from operator import setitem
ed_sheeran = [setitem(part, 1, part[1].upper()) for part in ed_sheeran ]
或者,如果您希望不导入setitem:
实际上,这是在原地完成的,因此您甚至不需要重新分配outter列表-尽管如果您不想在内存中创建新列表,并使用生成器表达式,则需要使用生成器。在这种情况下,any内置是一个不错的选择:
any(part.__setitem__(1, part[1].upper()) for part in ed_sheeran)
这之所以有效,是因为uu setitem_uuu_uu_uu_uu_u_u_u_u_u_u_u_u_u_u_u_u_____;返回无@HolyDanna不仅发布了他的尝试,还。这是一个非常好的问题。@HolyDanna阅读了这个问题,OP已经通过列表理解写下了他尝试的内容。他甚至对我的代码进行了注释,但不起作用。为什么需要使用列表理解?在循环中这样做更有效、更可读,如果您确定:对于en_sheeran中的e:e[1]=e[1],您可以在一行中这样做。upper@MoxieBall我只是想看看它是如何在python中使用列表理解的。我对它进行了更新,但出于解释的目的,我想把它画出来。这几乎和字符串列表一样,所以你可以使用字符串列表,而不是一开始就使用列表。它只需要以一种使用泛型序列的方式编写即可:[x[0]+x[1]。我可以知道什么是枚举吗?它是一个与循环相关的函数吗?是的-对于序列中的每个项,它都会生成项索引和项本身,并且在循环中两者都可用。
any(part.__setitem__(1, part[1].upper()) for part in ed_sheeran)