Если вы хотите исключить все эквивалентные фракции (то есть [-2.0, 5.0] и [4.0, -10.0] считаются эквивалентными), тогда будет работать следующий код.
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
Если вы пишете это в Python, язык который не имеет функции sign
, вам нужно будет либо использовать math.copysign, либо (numerator > 0)^(denominator > 0)
, где ^
является оператором xor.
Этот код предполагает, что числитель и знаменатель отличны от нуля.
Если вы действительно храните список номеров чисел с числителем-знаменателем, рассмотрите возможность хранения пар как неизменяемых кортежей или еще лучшего, как Python fractions.
Почему это все 'поплавка ', если они округлены до ближайшего целого числа? –
'list' - это ключевое слово. используйте что-то другое. – ssm