列表推导式的疑问
目的:用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)而仍然进行了输出? 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)
肯定是AI生成的答案,但解决了我的疑问 哈哈 {:10_254:} 我趣,我是欧皇耶! {:9_241:}
页:
[1]