Сравнение:
eval(i) == eval(i)+1
Будет сравниваться, если число i
равно равно до i + 1
, которое всегда будет возвращать False
. Я уверен, что вы хотите использовать i
в качестве индекса и просто хотите сравнить, если текущий элемент равен следующему элементу в списке. Тем не менее, выполнение этого на самом деле не отслеживает дубликаты, так как вы должны учитывать все остальное в списке.
Это также не хорошая идея использовать list
как имя переменной, поскольку она скрывает встроенную функцию list
. Множество других подходящих имен, которые вы можете использовать.
Один из способов - использовать набор для отслеживания того, что вы видели, и печатать только те предметы, которые вы видели впервые:
lst = ["5*3*2","5*2*3","2*3*5","2*5*3"]
seen = set()
for exp in lst:
calc = eval(exp)
if calc not in seen:
print(calc)
seen.add(calc)
Если вы всегда имеете дело с простыми умножающими выражениями с помощью оператора *
(без скобок), вы также можете использовать functools.reduce
и operator.mul
вместо умножения чисел вместо eval
здесь. Это сначала разделит числа на *
, отобразит каждую числовую строку в целое число, а затем умножит каждый элемент друг на друга.
from operator import mul
from functools import reduce
lst = ["5*3*2","5*2*3","2*3*5","2*5*3"]
seen = set()
for exp in lst:
numbers = map(int, exp.split("*"))
calc = reduce(mul, numbers)
if calc not in seen:
print(calc)
seen.add(calc)
Выход:
30