Python: удаление минусов из списка чисел
После появления remove_negs([1, 2, 3, -3, 6, -1, -3, 1]) выполняется, результат такой: [1, 2, 3, 6, -3, 1] . Предполагается, что результат [1, 2, 3, 6, 3, 1] . происходит то, что если есть два отрицательных числа подряд (например, -1, -3 ), то второе число не будет удалено. def main(): numbers = input(«Введите список чисел: «) remove_negs(numbers)
Звучит как хорошая работа для понимания списка, которое проверяет val >= 0. — Dogweather
Не удаляйте элементы из списка, который вы повторяете, так как это изменяет индекс элементов, и вы можете в конечном итоге пропустить некоторые элементы. — kylieCatt
Как говорили другие, не меняйте содержимое контейнера данных во время его повторения. Перебрать копию — для элемента в списке (num_list): — macfij
Также не стоит звонить remove чтобы удалить элемент, когда вы уже знаете, где он находится. Это (а) потенциально неправильно, потому что remove удаляет первый элемент, равный item , который может быть не тем, который вам нужен, и (б) медленным, потому что это означает, что вам придется искать элемент по всему списку, даже если вы уже знаете, где он находится. del num_list[index] всегда лучше. Но как узнать индекс? Простой: for index, item in enumerate(num_list): . (Это все примечание; это не решит вашу настоящую проблему… но для этого уже есть хорошие ответы и комментарии.) — abarnert
8 ответы
Обычно плохой идеей является удаление элементов из списка во время его повторения (см. связь в моем комментарии для объяснения, почему это так). Лучшим подходом было бы использование понимание списка:
Обратите внимание, что строка выше создает new список и назначает num_list к тому, что. Вы также можете выполнить «на месте» назначение формы
который не создает новый список в памяти, а вместо этого изменяет ячейку памяти, на которую уже указывает num_list . Эта разница объясняется более подробно здесь.
ответ дан 23 мая ’17, 11:05
Я не думаю, что ОП действительно нужно мутировать num_list здесь, поэтому исходная версия (без назначения слайса), вероятно, была в порядке. Может быть, было бы даже лучше показать оба и объяснить разницу? — Abarnert
@abarnert Да, возможно, ты прав. Я отредактирую, чтобы объяснить разницу. — аршаджи
@ user3161743: Вы сказали: «Результат должен быть [1, 2, 3, 6, 3, 1] . Это именно то, что выдает код arshajii. Если вы сделаете это так, как утверждаете, то результатом будет [1, 2, 3, 3, 6, 1, 3, 1] . — Abarnert
Если вы действительно хотите зациклиться, попробуйте следующее:
Это делает то, что вы хотите:
Суть в том, что оператор присваивания r = num_list[:] делает копию num_list. Чтобы не путать цикл, мы удаляем элементы из r а не из списка, который мы перебираем.
Подробнее: Обработка переменных в Python немного тонкая. Python сохраняет имена переменных, например r or num_list отдельно от переменных данных, таких как [1, 2, 3, 6, 1] . Имена являются просто указателями на данные. Рассмотрим оператор присваивания:
После выполнения этого оператора r и num_list оба указывают на одни и те же данные. Если вы вносите изменения в r данные, вы также вносите изменения в num_list , потому что они оба указывают на то же данные. Теперь рассмотрим:
Этот оператор говорит python изменить num_list данные, взяв только некоторые его элементы. Из-за этого python делает копию num_list данные. Так уж случилось, что [:] указывает, что мы хотим, чтобы все num_list данные не изменились, но это не мешает python делать копии. Копия назначена r . Это значит, что r и mum_list теперь укажите на различный данные. Мы можем внести изменения в r данные, и это не влияет num_list данные, потому что у них есть различный поле.
Если это новое для вас, вы можете посмотреть этот учебник о подходе Python к именам переменных и переменным данным: Понимание переменных Python и управления памятью
Python-сообщество
Нужно убрать минус в числе без использования abs, math или сплайсов в строке и тому подобное.
Вероятно подразумевается использование format в print. Но я что-то не могу найти подходящий оператор.
Может возможно математическое решение?
Какие есть варианты?
#2 Ноя. 19, 2022 16:18:51
убрать минус в числе без использования abs и math
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде 
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите
и вставьте ссылку на его url
…
есчщо
Отредактировано AD0DE412 (Ноя. 19, 2022 16:22:44)
#3 Ноя. 19, 2022 17:10:49
убрать минус в числе без использования abs и math
Прошу прощения, вопрос не полный. Дополняю.
На входе два числа, одно из другого вычитается. В результате нужно получить abs(число). Но входящие числа идут в разнобой. Проверить какое из них меньше так же нельзя.
Таким образом число может быть как положительным, так и отрицательным, но результат всегда должен быть положительным.
#4 Ноя. 19, 2022 18:21:06
убрать минус в числе без использования abs и math
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде 
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите
и вставьте ссылку на его url
…
есчщо
#5 Ноя. 19, 2022 20:31:04
убрать минус в числе без использования abs и math
#6 Ноя. 19, 2022 20:54:18
убрать минус в числе без использования abs и math
отож оно еще более очивидно
этот момент не понимаю
1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде 
2. чтобы вставить изображение залейте его куда нибудь (например) , нажмите
и вставьте ссылку на его url
…
есчщо
Отредактировано AD0DE412 (Ноя. 19, 2022 21:40:33)
#7 Ноя. 19, 2022 23:27:16
убрать минус в числе без использования abs и math
Это называется кортеж из элементов, из которого берётся элемент по индексу ноль или один.
n < 0 даёт в результате True или False. При этом, как известно, логические True и False являются объектами класса bool, который является подклассом класса int. Поэтому True и False можно использовать везде, где можно использовать целые числа.
Список классов питона можно получить, выполнив help() и далее набрав там слово “builtins”.
Также можно запустить pydoc или pydoc3 с опцией -p, открыть локально в браузере страницу на этом порте и там перейти в раздел builtins.
Как можно убрать знак — у числа? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 2 года назад .
У меня есть число: -1000 Как мне в итоге получить: 1000?
Функция abs возвращает абсолютную величину числа. Если ей передать отрицательное число, то она вернёт положительное. Если ей передать положительное число, то она вернёт положительное число.
Можно сделать так:
Тогда знак уберется только у числа: )
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Python: удаление негативов из списка чисел
Когда выполняется remove_negs([1, 2, 3, -3, 6, -1, -3, 1]) , результат: [1, 2, 3, 6, -3, 1] . Результат должен быть [1, 2, 3, 6, 3, 1] . что происходит, если в строке есть два отрицательных числа (например, -1, -3 ), то второе число не будет удалено. def main(): numbers = input ( «Введите список номеров:» ) remove_negs (номера)
7 ответов
Как правило, плохая идея удалить элементы из списка, итерации по нему (см. ссылка в моем комментарии для объяснения относительно почему это так). Лучшим подходом было бы использовать понимание :
Обратите внимание, что приведенная выше строка создает новый список и присваивает ему num_list . Вы также можете выполнить «на месте» присвоение формы
который не создает новый список в памяти, а вместо этого изменяет местоположение памяти, на которое уже указывает num_list . Это различие объясняется более подробно здесь.
Если вы действительно хотите выполнить цикл, попробуйте следующее:
Это делает то, что вы хотите:
Ключ состоит в том, что оператор присваивания r = num_list[:] создает копию num_list. Чтобы не путать цикл, мы удаляем элементы из r , а не из списка, который мы перебираем.
Дополнительно: Обработка переменных Python немного тонкая. Python сохраняет имена переменных, например r или num_list , отдельно от переменных данных, например [1, 2, 3, 6, 1] . Имена просто указывают на данные. Рассмотрим оператор присваивания:
После выполнения этого оператора r и num_list оба указывают на одни и те же данные. Если вы вносите изменения в данные r , вы также вносите изменения в данные num_list , потому что они оба указывают на одни и те же данные. Теперь рассмотрим:
Этот оператор сообщает python об изменении данных num_list , используя только некоторые его элементы. Из-за этого python создает копию данных num_list . Так получилось, что [:] указывает, что мы хотим, чтобы все данные num_list остались неизменными, но это не мешает python делать копию. Копия присваивается r . Это означает, что r и mum_list теперь указывают на разные данные. Мы можем вносить изменения в данные r и не влиять на данные num_list , поскольку они имеют разные данные.
Если это вам не знакомо, вам может понадобиться посмотреть на этот урок о подходе python к именам переменных и переменным данным: Понимание переменных Python и управления памятью