@awox

Почему количество уникальных значений не соответствует?

Реализуйте программу, которая будет вычислять количество различных объектов в списке.
Два объекта a и b считаются различными, если a is b равно False.
Вашей программе доступна переменная с названием objects, которая ссылается на список, содержащий не более 100 объектов. Выведите количество различных объектов в этом списке.
Примечание:
Количеством различных объектов называется максимальный размер множества объектов, в котором любые два объекта являются различными.
Рассмотрим пример:
objects = [1, 2, 1, 2, 3] # будем считать, что одинаковые числа соответствуют одинаковым объектам, а различные – различным
Тогда все различные объекты являют собой множество {1, 2, 3}. Таким образом, количество различных объектов равно трём.

Мое решение:

objects = [1, 2, 1, 2, 3]
a = set()
for obj in objects:
if objects[obj] not in a:
a.add(objects[obj])
print(len(a))

Вроде все правильно, но длина множества получается 2 а не 3.
  • Вопрос задан
  • 312 просмотров
Пригласить эксперта
Ответы на вопрос 4
SoreMix
@SoreMix Куратор тега Python
yellow
Не надо обращаться к objects по индексу, уже ведь итерируете элементы.

objects = [1, 2, 1, 2, 3]
a = set()
for obj in objects:
    if obj not in a:
        a.add(obj)
print(len(a))


ps:
a is b равно False. Так разве будет работать?

pps:
ну и можно сразу вызвать set(objects), хотя задача на алгоритмы наверное
Ответ написан
Комментировать
sanya84
@sanya84
Фанатик Python 3
objects = [1, 2, 1, 2, 3]
a = set()
for obj in objects:
    if obj not in a:
        a.add(obj)
print(a)
print(len(a))
Ответ написан
@o5a
Проблема решения в том, что Вы сам объект используете как индекс в списке
# здесь obj это сами объекты списка: 1,2,1,2,3
for obj in objects:
    # а здесь проверяете не сам объект а объект списка с таким индексом
    if objects[obj] not in a:

Таким образом при obj=3 идет проверка не 3, а элемента с индексом 3, т.е. objects[3] = 2, поэтому ничего не добавляется.

А решение тут уже привели.
Ответ написан
Комментировать
@geek10010
len({id(obj) for obj in objects})
Работает с мутабельными и иммутабельными объектами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы