Форум сайта python.su
Чуть короче:
objects = [1, 0, 50, 11, "Чтото", True, False, 0, 1,1, 50,1,1,1,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,True] z = 1 count = 0 for i in objects: for j in objects[z:]: if i is j: count += 1 break z+=1 print(len(objects) - count)
Офлайн
Вообще можно и так
>>> objects = [1, 0, 50, 11, "Чтото", True, False, 1, 0] >>> len(set(map(id, objects))) 7
Офлайн
JOHN_16Ну ты прям нас затроллил
Вообще можно и так
Офлайн
LestoroerДа примерно так, но можно короче, завтра напишу свое решение, сегодня компа под рукой нет.
Офлайн
JOHN_16Прям шикарно!)
Вообще можно и так
>>> objects =
>>> len(set(map(id, objects)))
7
Отредактировано Vlad_Ki (Апрель 15, 2016 12:39:25)
Офлайн
JOHN_16Месье знает толк в извращениях
Вообще можно и так
Офлайн
Ребят, ну Вы что? Задачка простейшая! Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы. Самый простой, и правильный, вариант решения этой задачи - преобразование в множество, а затем просто вывести длину множествa, а то есть len(set(a)). Теперь о самой задаче: уж поверьте на слово, смысловой нагрузки у этой задачи не просто крайне мало, ее вообще практически нет! К тому же, сама постановка задачи нарушает одну из директив самого языка - простоту! В реальной жизни никому в принципе не придет в голову добиваться результата через такие костыли!
a = [1, 0, 50, 11, "Что-то", True, False, 1, 0]
print(len(set(a)))
Офлайн
Да, задачка, конечно, интересная, вообще говоря, достаточно глубокая!
Если обязательно нужно использовать оператор сравниня `is`, то есть ее элегантное решение (от JOHN_16).
Но, вот, рассмотрим пример:
>>> a = [1,1,2,2,3, 10**2, 100] >>> len(set(map(id,a))) 4 >>> a = [1,1,2,2,3, 100**2, 10000] >>> len(set(map(id,a))) 5
Офлайн
Zodtне правда:
Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы.
>>> id(True) 4306851104 >>> id(1) 4307228720 >>> True is 1 False
>>> [bool(x) for x in (True, 1, False, 0, 123)] [True, True, False, False, True] >>> True + 1 2 >>> False + 1 1 >>> [int(x) for x in (True, False)] [1, 0]
>>> True.__class__.__mro__ (<class 'bool'>, <class 'int'>, <class 'object'>) >>> int(1).__class__.__mro__ (<class 'int'>, <class 'object'>)
Офлайн