鱼C论坛

 找回密码
 立即注册
查看: 1273|回复: 5

[已解决]列表推导式的疑问

[复制链接]
发表于 2023-9-15 08:30:45 | 显示全部楼层 |阅读模式

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

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

x
目的:用a和b生成去掉原点坐标(0, 0)的列表

代码:
a = [-1, 0, 1]
b = [-1, 0, 1]
c = [(x, y) for x in a for y in b].remove((0, 0))
d = [(x, y) for x in a for y in b if (a or b)]
print("c:", c)
print("d:", d)

结果:
c: None
d: [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1)]

问题:
1.为什么remove((0, 0))不能去掉(0, 0),而清空了整个列表?
2.为什么列表推导式中if(a or b)不能去掉(0, 0)而仍然进行了输出?
最佳答案
2023-9-15 08:30:53
1. 因为列表的remove()方法会直接在原列表上进行删除操作,并且返回值为None。在c中,列表推导式生成的列表并没有赋给一个变量,而是直接在原列表上进行了删除操作,所以最终输出的是None。正确的操作应该是先生成列表,再对列表进行删除操作,如下所示:
a = [-1, 0, 1]
b = [-1, 0, 1]
c = [(x, y) for x in a for y in b if (x, y) != (0, 0)]
c.remove((0, 0))
print("c:", c)

2. 列表推导式中的if语句判断的是(x, y)是否满足条件,而(a or b)判断的是a和b是否有一个为True。所以在d中,if语句的判断条件一直为True,导致(0, 0)也被包含在了列表中。正确的操作应该是将判断条件改为(x, y) != (0, 0),如下所示:
a = [-1, 0, 1]
b = [-1, 0, 1]
d = [(x, y) for x in a for y in b if (x, y) != (0, 0)]
print("d:", d)

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-15 08:30:53 | 显示全部楼层    本楼为最佳答案   
1. 因为列表的remove()方法会直接在原列表上进行删除操作,并且返回值为None。在c中,列表推导式生成的列表并没有赋给一个变量,而是直接在原列表上进行了删除操作,所以最终输出的是None。正确的操作应该是先生成列表,再对列表进行删除操作,如下所示:
a = [-1, 0, 1]
b = [-1, 0, 1]
c = [(x, y) for x in a for y in b if (x, y) != (0, 0)]
c.remove((0, 0))
print("c:", c)

2. 列表推导式中的if语句判断的是(x, y)是否满足条件,而(a or b)判断的是a和b是否有一个为True。所以在d中,if语句的判断条件一直为True,导致(0, 0)也被包含在了列表中。正确的操作应该是将判断条件改为(x, y) != (0, 0),如下所示:
a = [-1, 0, 1]
b = [-1, 0, 1]
d = [(x, y) for x in a for y in b if (x, y) != (0, 0)]
print("d:", d)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-15 08:40:12 | 显示全部楼层
肯定是AI生成的答案,但解决了我的疑问 哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-15 09:01:01 | 显示全部楼层

回帖奖励 +10 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-15 09:01:20 | 显示全部楼层
我趣,我是欧皇耶!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-15 09:17:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-25 15:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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