Найти - Пользователи
Полная версия: Функция, сортировка и логические выражения
Начало » Python для новичков » Функция, сортировка и логические выражения
1 2
xam1816
Roiser
Почему тогда в первом цикле при i = 0.0 выражение i is not 0.0 дает False, а в функции дает True? Когда это кэширование происходит? Если это трудно объяснить тут, подскажите, где про это почитать.

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

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

интересный момент
Roiser
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
интересный момент
Вот вот…

Спасибо за ссылку, но там ответа не нашел
AD0DE412
xam1816
заинтересовала задача,False как 0 воспринимает,переписал код
вот еще … один пример … типа False для сравнений
 In [1]: a = None
In [2]: if a:
   ...:     print(1)
   ...: else:
   ...:     print(2)
   ...:
2
In [3]:
py.user.next
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 записывать для большей выразительности и питон это понимает и разворачивает потом у себя внутри в две операции.
Roiser
py.user.next
Для сравнения значений используй операцию == , а для сравнения типов используй операцию is и такую идиому с ней
Это я понял. Использовал is только чтобы понять
Rodegast
Значения типа int кэшируются в небольшом диапазоне, по этому для значений из этого диапазона сравнение через is будет работать
Что оно работает для int в диапазоне -5:256.
А можете объяснить #9 пост на 1 странице?
Rodegast
> А можете объяснить #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]
Roiser
Rodegast
Я там не заметил ничего не обычного.
Через консоль - да, работает как и должно. А в файле .py если писать, то выводит:
 [9, 9, 1, 2, 1, 1, 3, 1, 9, 9]
И как заметил коллега
xam1816
в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень
Rodegast
> Через консоль - да, работает как и должно. А в файле .py если писать, то выводит:
> в твоей функции если этот же список создать прямо в функции то обрабатывается нормально,а если передавать аргументом,то выходит такая хрень

Ну просто интерпретатор видя всю программу целиком производит какие-то оптимизации.
@cckyi_boxxx
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 можно значительно упростить, попробуйте сделать это самостоятельно, это будет хорошей разминкой))) Если не справитесь - пишите, подскажу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB