Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 13, 2016 23:26:37

elisk
Зарегистрирован: 2013-04-09
Сообщения: 35
Репутация: +  7  -
Профиль   Отправить e-mail  

Правильно поставить условие

Чуть короче:

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)

Офлайн

#2 Апрель 13, 2016 23:49:58

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Правильно поставить условие

Вообще можно и так

>>> objects = [1, 0, 50, 11, "Чтото", True, False, 1, 0]
>>> len(set(map(id, objects)))
7



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 14, 2016 00:37:52

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Правильно поставить условие

JOHN_16
Вообще можно и так
Ну ты прям нас затроллил

Офлайн

#4 Апрель 14, 2016 13:29:27

osipbananov
Зарегистрирован: 2016-03-31
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильно поставить условие

Lestoroer
Да примерно так, но можно короче, завтра напишу свое решение, сегодня компа под рукой нет.

Офлайн

#5 Апрель 15, 2016 12:15:29

Vlad_Ki
Зарегистрирован: 2016-01-22
Сообщения: 69
Репутация: +  1  -
Профиль   Отправить e-mail  

Правильно поставить условие

JOHN_16
Вообще можно и так

>>> objects =
>>> len(set(map(id, objects)))
7


Прям шикарно!)
Впечатлил)



lol developer

Отредактировано Vlad_Ki (Апрель 15, 2016 12:39:25)

Офлайн

#6 Апрель 15, 2016 13:18:50

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Правильно поставить условие

JOHN_16
Вообще можно и так
Месье знает толк в извращениях



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#7 Окт. 18, 2016 00:18:54

Zodt
Зарегистрирован: 2016-03-02
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильно поставить условие

Ребят, ну Вы что? Задачка простейшая! Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы. Самый простой, и правильный, вариант решения этой задачи - преобразование в множество, а затем просто вывести длину множествa, а то есть len(set(a)). Теперь о самой задаче: уж поверьте на слово, смысловой нагрузки у этой задачи не просто крайне мало, ее вообще практически нет! К тому же, сама постановка задачи нарушает одну из директив самого языка - простоту! В реальной жизни никому в принципе не придет в голову добиваться результата через такие костыли!

a = [1, 0, 50, 11, "Что-то", True, False, 1, 0]
print(len(set(a)))

Офлайн

#8 Окт. 18, 2016 03:19:21

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Правильно поставить условие

Да, задачка, конечно, интересная, вообще говоря, достаточно глубокая!
Если обязательно нужно использовать оператор сравниня `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
Все правильно, для сравнения используется `is`, но того ли хотел автор задачи, ведь 100**2 is 10000 == False, но 10 **2 is 100 == True, и вот, мы уже на пороге анализа “внутренней” работы Python'а ….

Офлайн

#9 Окт. 20, 2016 16:29:40

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Правильно поставить условие

Zodt
Правильным ответом будет 5, так как Python не различает True и 1, как и False с 0, для него это синонимы.
не правда:
 >>> id(True)
4306851104
>>> id(1)
4307228720
>>> True is 1
False
Если мы говорим об объектах, то питон прекрасно отличает True от 1. Вы же путаете то как питон может работать с этими типами объектов, например:
 >>> [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'>)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version