seen = set()
for numerator, denominator in lst:
quotient = numerator / denominator
if quotient not in seen:
seen.add(quotient)
yield numerator, denominator
否则,如果希望最终列表同时包含[-2.0,5.0]和[4.0,-10.0]:
seen = set()
for numerator, denominator in lst:
value = (abs(numerator), abs(denominator), sign(numerator)*sign(denominator))
if value not in seen:
seen.add(value)
yield numerator, denominator
假设所有值都是浮点值(因此可以始终使用浮点除法),可以执行以下操作:
现在您想要的列表将存储为
new_list
。请注意,应该避免像上面那样将值写入关键字list
。你知道吗*澄清一下,我假设如果您有超过2个返回相同比率的值(例如
[[1,3],[2,6],[3,9]]
),您将只希望保留其中一个。你知道吗我可以这样试一下吗:
Tuple可能是一个字典键,所以我在更改为abs之后将列表转换为Tuple 列表元素的值,并保留原始列表作为值。你知道吗
如果您想消除所有等价的分数(意味着[-2.0,5.0]和[4.0,-10.0]被认为是等价的),那么下面的代码就可以工作了。你知道吗
否则,如果希望最终列表同时包含[-2.0,5.0]和[4.0,-10.0]:
如果您是用Python编写的,这是一种缺少
sign
函数的语言,则需要使用math.copysign或(numerator > 0) ^ (denominator > 0)
,其中^
是xor运算符。你知道吗这个代码假设分子和分母都不为零。你知道吗
如果您确实要保存分子-分母-数字对的列表,请考虑将这些对存储为不可变元组,或者更好地存储为Python fractions。你知道吗
相关问题 更多 >
编程相关推荐