设置向上
我正在寻找2个封闭集合中的所有整数对(x,y)
:[822,2000]
和[506,1231]
,以便x/y=1.624
。
代码
我试过了,
a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y = 1.624]
但是这会在代码中指向SyntaxError: invalid syntax
=
。
如果我这样做,
a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y <= 1.624]
我得到NameError: name 'y' is not defined
。
我该如何解决这个问题?
答案 0 :(得分:4)
由于浮点算法的性质,将浮点计算与==进行比较是很困难的。
这样比较通常更好:
a = [(x,y) for x in range(822,2001) for y in range(506,1232) if abs(x/y - 1.624) < 0.00001]
print(set(a))
通过从结果中减去所需的值,并将其绝对值与某种小的值进行比较,可以获得更好的结果。
结果(使用一套):
{(1624, 1000), (1637, 1008), (1015, 625), (1611, 992), (1840, 1133),
(1814, 1117), (1827, 1125), (1408, 867), (1218, 750), (1434, 883),
(1421, 875)}
答案 1 :(得分:2)
对于第一个,您使用赋值运算符而不是等效运算符,因此它应该是:
a = [[(x,y)] for x in range(822,2001) and y in range(506,1232) if x/y == 1.624]
对于第二个你可能最好使用两个for循环
a = [[(x,y)] for x in range(822,2001) for y in range(506,1232) if x/y <= 1.624]
第二个就像你说的那样没有意义,因为x和y来自具有不等数量元素的列表,所以你不能像那样循环它们