Форум сайта python.su
124
Roiser
Почему тогда в первом цикле при i = 0.0 выражение i is not 0.0 дает False, а в функции дает True? Когда это кэширование происходит? Если это трудно объяснить тут, подскажите, где про это почитать.
Офлайн
1
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)
Офлайн
44
xam1816вот еще … один пример … типа False для сравнений
заинтересовала задача,False как 0 воспринимает,переписал код
In [1]: a = None In [2]: if a: ...: print(1) ...: else: ...: print(2) ...: 2 In [3]:
и вставьте ссылку на его url Офлайн
857
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 >>>
# пишется так type(15) is not float # на самом деле это not (type(15) is float)
Отредактировано py.user.next (Май 16, 2020 03:01:51)
Офлайн
1
py.user.nextЭто я понял. Использовал is только чтобы понять
Для сравнения значений используй операцию == , а для сравнения типов используй операцию is и такую идиому с ней
RodegastЧто оно работает для int в диапазоне -5:256.
Значения типа int кэшируются в небольшом диапазоне, по этому для значений из этого диапазона сравнение через is будет работать
Отредактировано Roiser (Май 16, 2020 15:33:04)
Офлайн
186
> А можете объяснить #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]
Офлайн
1
RodegastЧерез консоль - да, работает как и должно. А в файле .py если писать, то выводит:
Я там не заметил ничего не обычного.
[9, 9, 1, 2, 1, 1, 3, 1, 9, 9]
xam1816
в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень
Отредактировано Roiser (Май 16, 2020 19:07:26)
Офлайн
186
> Через консоль - да, работает как и должно. А в файле .py если писать, то выводит:
> в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень
Ну просто интерпретатор видя всю программу целиком производит какие-то оптимизации.
Офлайн
14
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]
Отредактировано @cckyi_boxxx (Май 17, 2020 19:05:30)
Офлайн