lzb1001 发表于 2023-4-22 17:51:32

(x < y and [x] or [y])[0]

实现什么样的功能?

三元操作符没看懂呢

isdkz 发表于 2023-4-22 17:55:01

这个表达式是一个 Python 的条件表达式,这个表达式的功能是在给定的条件(x < y)下返回两个值中的一个。

表达式的结构如下:

`(x < y and or )`

这个表达式可以分为以下几个部分来理解:

1. `x < y`:比较 x 和 y 的大小,如果 x 小于 y,结果为 True,否则为 False。
2. `and`:逻辑与操作,如果前面的条件(x < y)为 True,则继续计算后面的表达式()。
3. `or`:逻辑或操作,如果前面的条件(x < y)为 False,则计算后面的表达式()。
4. `` 和 ``:将 x 和 y 分别放入一个列表中。这样做的原因是,Python 中的 and 和 or 操作符返回它们操作的值,而不是布尔结果。当 x < y 为 True 时,这个表达式的结果将是 ,否则将是 。
5. ``:从上面生成的列表( 或 )中取出第一个元素(x 或 y)。

因此,这个表达式实际上是根据条件 x < y 来选择返回 x 或 y 的值。如果 x < y 成立,返回 x,否则返回 y。这个表达式实现的功能类似于 Python 的内置函数 `min(x, y)`。

lzb1001 发表于 2023-4-22 21:12:48

isdkz 发表于 2023-4-22 17:55
这个表达式是一个 Python 的条件表达式,这个表达式的功能是在给定的条件(x < y)下返回两个值中的一个。
...

小甲鱼在教材中说:

三元操作符语法:a = x if (条件) else y,表示当条件为真True时,a的值赋值为x,否则(即当条件为假False的时候),a的值赋值为y。

(x < y and or )和小甲鱼说的语法好像对不上号吧?

isdkz 发表于 2023-4-22 21:15:21

lzb1001 发表于 2023-4-22 21:12
小甲鱼在教材中说:

三元操作符语法:a = x if (条件) else y,表示当条件为真True时,a的值赋值为x, ...

实际上,(x < y and or ) 并不是一个三元操作符。Python 中的三元操作符是这样的:

a = x if (条件) else y

这种形式的三元操作符会根据条件为真或假分别将 x 或 y 赋值给 a。

而 (x < y and or ) 这个表达式是一种较老的 Python 技巧,用于在不支持三元操作符的较早版本的 Python 中实现类似的功能。虽然这种写法在较新版本的 Python 中仍然有效,但推荐使用 a = x if (条件) else y 这种标准的三元操作符语法。

因此,a = x if (x < y) else y 才是正确的三元操作符写法,用于根据条件 x < y 来选择赋值 x 或 y 给 a。

lzb1001 发表于 2023-4-22 21:18:05

isdkz 发表于 2023-4-22 21:15
实际上,(x < y and or ) 并不是一个三元操作符。Python 中的三元操作符是这样的:

a = x i ...

(x < y and or ) 能写成三元操作符的形式吗?

isdkz 发表于 2023-4-22 21:19:25

lzb1001 发表于 2023-4-22 21:18
(x < y and or ) 能写成三元操作符的形式吗?

将 (x < y and or ) 写成三元操作符的形式如下:

a = x if (x < y) else y

这个表达式根据条件 x < y 来选择赋值 x 或 y 给 a。如果 x < y 成立(即条件为真),则 a 的值为 x;否则(即条件为假),a 的值为 y。这与 (x < y and or ) 的功能相同,但更符合 Python 的标准三元操作符语法。

lzb1001 发表于 2023-4-22 21:30:46

isdkz 发表于 2023-4-22 21:19
将 (x < y and or ) 写成三元操作符的形式如下:

a = x if (x < y) else y


>>> x =

>>> y =

>>> (x < y and or )


我以为返回结果是2,因为x < y and or 的结果是,而索引值对应的元素是第一个2,没想到结果是

isdkz 发表于 2023-4-22 21:33:56

lzb1001 发表于 2023-4-22 21:30
>>> x =

>>> y =


把 和 的中括号去掉

这样就是2了:
(x < y and x or y)

lzb1001 发表于 2023-4-22 22:09:01

本帖最后由 lzb1001 于 2023-4-22 22:13 编辑

isdkz 发表于 2023-4-22 21:33
把 和 的中括号去掉

这样就是2了:


1、那原来(x < y and or )中为什么要用 or ?

2、去掉中括号后,x和y是不是变成元组了?

3、能否举个(x < y and or )有返回值的例子?(x < y and x or y)我刚测试是可以

isdkz 发表于 2023-4-22 22:13:41

lzb1001 发表于 2023-4-22 22:09
1、那原来(x < y and or )中为什么要用 or ?

2、去掉中括号后,x和y是不是变成元 ...

1. 在原来的表达式 `(x < y and or )` 中,`` 和 `` 分别将 x 和 y 包装在列表中。这个表达式是在不支持三元操作符的较早版本的 Python 中实现类似功能的一种技巧。这种写法在较新版本的 Python 中仍然有效,但推荐使用标准的三元操作符语法。在这个例子中,使用 `` 和 `` 可能是不必要的,因为 x 和 y 本身就是列表。

2. 对于 `(x < y and or )`,该表达式要求从结果列表中取出索引为 1 的元素。但在这个例子中,`(x < y and or )` 的结果只可能是 `` 或 ``,它们都只包含一个元素(一个列表),所以索引 1 不存在。因此,`(x < y and or )` 不会有返回值。

不过,如果你想要比较两个列表中的元素并根据某个条件获取相应索引处的值,可以使用以下方法:

x =
y =
index = 1# 你想要获取的索引
result = x if x < y else y


这样,`result` 变量将存储 x 和 y 中索引 1 处较小的值。在这个例子中,`result` 的值将为 1。
页: [1]
查看完整版本: (x < y and [x] or [y])[0]