鱼C论坛

 找回密码
 立即注册
查看: 2445|回复: 9

[已解决](x < y and [x] or [y])[0]

[复制链接]
发表于 2023-4-22 17:51:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
实现什么样的功能?

三元操作符没看懂呢
最佳答案
2023-4-22 22:13:41
lzb1001 发表于 2023-4-22 22:09
1、那原来(x < y and [x] or [y])[0]中为什么要用[x] or [y]?

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

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

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

不过,如果你想要比较两个列表中的元素并根据某个条件获取相应索引处的值,可以使用以下方法:
x = [3, 2, 1]
y = [2, 1, 3]
index = 1  # 你想要获取的索引
result = x[index] if x[index] < y[index] else y[index]

这样,`result` 变量将存储 x 和 y 中索引 1 处较小的值。在这个例子中,`result` 的值将为 1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-22 17:55:01 | 显示全部楼层
这个表达式是一个 Python 的条件表达式,这个表达式的功能是在给定的条件(x < y)下返回两个值中的一个。

表达式的结构如下:

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

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

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

因此,这个表达式实际上是根据条件 x < y 来选择返回 x 或 y 的值。如果 x < y 成立,返回 x,否则返回 y。这个表达式实现的功能类似于 Python 的内置函数 `min(x, y)`。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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 [x] or [y])[0]和小甲鱼说的语法好像对不上号吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 21:15:21 | 显示全部楼层
lzb1001 发表于 2023-4-22 21:12
小甲鱼在教材中说:

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

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

a = x if (条件) else y

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

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

因此,a = x if (x < y) else y 才是正确的三元操作符写法,用于根据条件 x < y 来选择赋值 x 或 y 给 a。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-22 21:18:05 | 显示全部楼层
isdkz 发表于 2023-4-22 21:15
实际上,(x < y and [x] or [y])[0] 并不是一个三元操作符。Python 中的三元操作符是这样的:

a = x i ...

(x < y and [x] or [y])[0] 能写成三元操作符的形式吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 21:19:25 | 显示全部楼层
lzb1001 发表于 2023-4-22 21:18
(x < y and [x] or [y])[0] 能写成三元操作符的形式吗?

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

a = x if (x < y) else y

这个表达式根据条件 x < y 来选择赋值 x 或 y 给 a。如果 x < y 成立(即条件为真),则 a 的值为 x;否则(即条件为假),a 的值为 y。这与 (x < y and [x] or [y])[0] 的功能相同,但更符合 Python 的标准三元操作符语法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-22 21:30:46 | 显示全部楼层
isdkz 发表于 2023-4-22 21:19
将 (x < y and [x] or [y])[0] 写成三元操作符的形式如下:

a = x if (x < y) else y

>>> x = [3, 2, 1]

>>> y = [2, 1, 3]

>>> (x < y and [x] or [y])[0]
[2, 1, 3]

我以为返回结果是2,因为x < y and [x] or [y]的结果是[2, 1, 3],而[0]索引值对应的元素是第一个2,没想到结果是[2, 1, 3]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 21:33:56 | 显示全部楼层
lzb1001 发表于 2023-4-22 21:30
>>> x = [3, 2, 1]

>>> y = [2, 1, 3]

把 [x] 和 [y] 的中括号去掉

这样就是2了:
(x < y and x or y)[0]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-22 22:09:01 | 显示全部楼层
本帖最后由 lzb1001 于 2023-4-22 22:13 编辑
isdkz 发表于 2023-4-22 21:33
把 [x] 和 [y] 的中括号去掉

这样就是2了:


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

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

3、能否举个(x < y and [x] or [y])[1]有返回值的例子?(x < y and x or y)[1]我刚测试是可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-22 22:13:41 | 显示全部楼层    本楼为最佳答案   
lzb1001 发表于 2023-4-22 22:09
1、那原来(x < y and [x] or [y])[0]中为什么要用[x] or [y]?

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

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

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

不过,如果你想要比较两个列表中的元素并根据某个条件获取相应索引处的值,可以使用以下方法:
x = [3, 2, 1]
y = [2, 1, 3]
index = 1  # 你想要获取的索引
result = x[index] if x[index] < y[index] else y[index]

这样,`result` 变量将存储 x 和 y 中索引 1 处较小的值。在这个例子中,`result` 的值将为 1。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 09:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表