Уведомления

Группа в Telegram: @pythonsu

#1 Май 14, 2020 21:45:28

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1396
Репутация: +  124  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

Roiser
Почему тогда в первом цикле при i = 0.0 выражение i is not 0.0 дает False, а в функции дает True? Когда это кэширование происходит? Если это трудно объяснить тут, подскажите, где про это почитать.

о переменных и управление памятью Your text to link here…

в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень и если is not поменять на != , то тоже срабатывает нормально

интересный момент

Офлайн

#2 Май 15, 2020 00:30:32

Roiser
Зарегистрирован: 2020-04-26
Сообщения: 14
Репутация: +  1  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

xam1816
заинтересовала задача,False как 0 воспринимает,переписал код
А зачем столько проверок?
 def move_zeros(array):
    zIndex = []
    zCount = 0
    for i in array:
        if i is not 0 and type(i) is not float:
            zIndex.append(i)
        else:
            zCount += 1
    return zIndex + [0]*zCount

xam1816
интересный момент
Вот вот…

Спасибо за ссылку, но там ответа не нашел

Отредактировано Roiser (Май 15, 2020 00:41:09)

Офлайн

#3 Май 15, 2020 20:14:50

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

xam1816
заинтересовала задача,False как 0 воспринимает,переписал код
вот еще … один пример … типа False для сравнений
 In [1]: a = None
In [2]: if a:
   ...:     print(1)
   ...: else:
   ...:     print(2)
   ...:
2
In [3]:



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#4 Май 16, 2020 02:55:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

Roiser
Добавил сравнение по типу, заработало.
Для сравнения значений используй операцию == , а для сравнения типов используй операцию is и такую идиому с ней
  
type(15) is int
type(15) is not float

Пример
  
>>> type(15) is int
True
>>> type(15) is float
False
>>> type(15) is not float
True
>>>

Выражение is not - это не операция, а две операции
  
# пишется так
type(15) is not float
 
# на самом деле это
not (type(15) is float)
Просто принято через is not записывать для большей выразительности и питон это понимает и разворачивает потом у себя внутри в две операции.



Отредактировано py.user.next (Май 16, 2020 03:01:51)

Офлайн

#5 Май 16, 2020 15:32:22

Roiser
Зарегистрирован: 2020-04-26
Сообщения: 14
Репутация: +  1  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

py.user.next
Для сравнения значений используй операцию == , а для сравнения типов используй операцию is и такую идиому с ней
Это я понял. Использовал is только чтобы понять
Rodegast
Значения типа int кэшируются в небольшом диапазоне, по этому для значений из этого диапазона сравнение через is будет работать
Что оно работает для int в диапазоне -5:256.
А можете объяснить #9 пост на 1 странице?

Отредактировано Roiser (Май 16, 2020 15:33:04)

Офлайн

#6 Май 16, 2020 16:25:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

> А можете объяснить #9 пост на 1 странице?

Я там не заметил ничего не обычного.

 >>> a = [9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,9]
>>> c = []
>>> for i in a:
...     if i is not 0 and i is not 0.0:
...         c.append(i)
[9, 0.0, 9, 1, 2, 1, 1, 0.0, 3, 1, 9, 9]



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Май 16, 2020 19:05:19

Roiser
Зарегистрирован: 2020-04-26
Сообщения: 14
Репутация: +  1  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

Rodegast
Я там не заметил ничего не обычного.
Через консоль - да, работает как и должно. А в файле .py если писать, то выводит:
 [9, 9, 1, 2, 1, 1, 3, 1, 9, 9]
И как заметил коллега
xam1816
в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень

Отредактировано Roiser (Май 16, 2020 19:07:26)

Офлайн

#8 Май 17, 2020 13:29:13

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

> Через консоль - да, работает как и должно. А в файле .py если писать, то выводит:
> в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень

Ну просто интерпретатор видя всю программу целиком производит какие-то оптимизации.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#9 Май 17, 2020 18:50:16

@cckyi_boxxx
От:
Зарегистрирован: 2012-01-13
Сообщения: 181
Репутация: +  14  -
Профиль   Отправить e-mail  

Функция, сортировка и логические выражения

Roiser,я рекомендовал-бы вам самостоятельно поиграться с сортировкой, смотрите какая красота получается:

 lll = [9,0.0,0,9,1,2,0,1,0,1,0.0,3,0,1,9,0,0,0,0,-99,-1]
def sortlst(unsorted):
    unsorted.sort(key = lambda *args: max([abs(x) for x in args]), reverse=True)
    
print('unsorted - ', lll)
sortlst(lll)
print('sorted - ', lll)
выдает на гора следующее:
unsorted -  [9, 0.0, 0, 9, 1, 2, 0, 1, 0, 1, 0.0, 3, 0, 1, 9, 0, 0, 0, 0, -99, -1]
sorted - [-99, 9, 9, 9, 3, 2, 1, 1, 1, 1, -1, 0.0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0]

работает так: используется встроенный в list метод sort, которому можно впихнуть функцию сортировки, что и сделано, а abs() нужен что-бы параметры отбрасывали знаки, иначе минуса так-же закинет в конец, а нам это не нужно. Что-бы разобраться гуглите list.sort() и sorted(), умение ими пользоваться 100% пригодится.

################################# update
во я набыдлокодил, параметр key можно значительно упростить, попробуйте сделать это самостоятельно, это будет хорошей разминкой))) Если не справитесь - пишите, подскажу.



Отредактировано @cckyi_boxxx (Май 17, 2020 19:05:30)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version