理解列表推导式的语法

3

我不理解列表推导式的语法:

newList = [expression(element) for element in oldList if condition]

我不理解的部分是(element)。假设你有以下代码:
List = [character for character in 'Hello world!']
print(list)

然后你会得到:

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

由于第一个字符不是一个表达式,它的作用是什么?它只是意味着将字符串中的每个项目存储在新列表中吗?


你可以参考Python中的列表推导,如何操作?来理解这个推导式是如何工作的。 - ThePyGuy
但是 character 一个表达式。而且,是的,列表推导式 正在 创建一个新列表。 - quamrana
不要使用List作为变量名,因为它是一个保留关键字。尝试使用my_list以避免问题。 - TERMINATOR
这回答您的问题吗?“列表推导式”和类似概念是什么意思?它是如何工作的,我该如何使用它? - Gino Mempin
2个回答

2
Python的列表推导是在列表中执行的循环,用于生成一个新的列表。Python列表推导之所以从右到左进行评估,是因为通常在Python中括号([], {}, ())中的任何内容都是从右到左执行的,只有少数例外。另一件需要注意的事情是字符串是可迭代的(lists,tuples, sets, dictionaries, numpy数组),可以将字符连接起来,使其可以像列表一样迭代。 列表推导格式:
new_list = [item for item in my_list]

这将产生相同的效果:
for item in my_list:
    my_list.append(item)

由于字符串是字符的可迭代对象,因此您可以这样做:
my_list = [character for character in 'Hello world!'] 
print(list)

输出:

['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

您的列表推导式也可以写成以下形式:
my_list = []
for character in 'Hello world':
    my_list.append(character)

print(my_list)

我也要指出的是,你不应该使用内置方法(如List)作为变量名,因为这样会覆盖它们,将来就无法使用该方法。
下面是Python 3.9.6中所有内置方法的完整列表:

Built in methods


1
让我们通过几个例子来了解 Python 列表推导式的语法。完整参考 文档
基本用法:[<expression> for <item> in <iterable>]。在 Python 中,任何实现 __next__() 方法的对象都是可迭代的。
例如,列表对象是可迭代的。考虑以下代码:
list_a = [1, 2, 3]
list_b = [item for item in list_a]     # [1, 2, 3]
list_c = [item + 1 for item in list_a] # [2, 3, 4]
list_d = [None for item in list_a]     # [None, None, None]

有趣的是,String对象也可迭代。因此,当您遍历字符串时,每个项都将是一个字符。这在您的示例中是这种情况。
现在,谈到表达式。在Python中,任何值(整数、浮点数、字符等)或任何对象都是表达式。仅为澄清起见,表达式不包含等号符号。是一个关于“Python中的表达式是什么?”的优秀答案。
我注意到您使用了(评论中也指出了)变量名为“list”。在Python中,有一些关键字和名称不应用作变量名。您可以通过以下方式找到所有此类内置名称的列表:(参考此文章以获取更多详细信息
import builtins
dir(builtins)

你喜欢从别人的帖子和评论中复制吗?这是非常粗鲁的行为。 - TERMINATOR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接