|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)而仍然进行了输出?
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)
复制代码
|
|