gpt4 book ai didi

python - 这个列表理解是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-03 14:21:48 25 4
gpt4 key购买 nike

list1 = ['Hello', 10, None]
list2 = [g.lower() for g in list1 if isinstance(g, str)]
list3 = [g.lower() if isinstance(g,str) else g for g in list1]
list4 = [isinstance(g, str) and g.lower() or g for g in list1]

如果我想转换list中的字符串小写,我可以使用list2中的方法输出将是 ['hello'] .

除了这种转换,如果我想保留整数(在本例中为 10)和 None , list3 中的方法和 list4将工作,输出将是 ['hello', 10, None] .

我的问题是我无法理解 list4 中的方法有效。

最佳答案

首先,编写如下代码:

condition and value1 or value2

在以下时间之前,人们是如何在 Python 中实现三元条件运算符的:

value1 if condition else value2

conditional expression由于 PEP 0308 在 2.5 版中引入.现在已弃用旧方法,取而代之的是效率更高、可读性更高的新方法。


旧方法之所以有效,是因为 andor 在 Python 中的操作方式。这些运算符不像大多数其他语言那样返回 bool 结果,而是返回值。

如果 a 的计算结果为 False,则执行 a 和 b 将返回 a;否则,它返回 b:

>>> 0 and 1
0
>>> 1 and 0
0
>>> 1 and 2
2
>>>

如果 a 的计算结果为 True,则执行 a 或 b 将返回 a;否则,它返回 b:

>>> 1 or 0
1
>>> 0 or 1
1
>>> 1 or 2
1
>>>

此外,如果您不知道,0 的计算结果为 False,而所有其他数字的计算结果为 True


来到你的代码,这个:

isinstance(g, str) and g.lower() or g

实际上被 Python 解释为:

(isinstance(g, str) and g.lower()) or g

现在如果 isinstance(g, str) 返回 False(g 不是字符串):

(False and g.lower()) or g

Falseand 返回:

False or g

然后返回g。因此,我们避免在非字符串类型上调用 .lower()

如果 isinstance(g, str) 返回 True(g 是一个字符串):

(True and g.lower()) or g

and 返回 g.lower():

g.lower() or g

然后 or 返回 g.lower(),这很好,因为 g 是一个字符串。


总结起来,这两个表达式:

g.lower() if isinstance(g,str) else g

isinstance(g, str) and g.lower() or g

在功能上是等价的。 但请使用第一个!!另一个可读性很差。

关于python - 这个列表理解是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27084119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com