Как в питоне убрать минус

от admin

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(число). Но входящие числа идут в разнобой. Проверить какое из них меньше так же нельзя.
Таким образом число может быть как положительным, так и отрицательным, но результат всегда должен быть положительным.

Читать:
Как изменить цвет панели закладок в google chrome

#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 и управления памятью

Похожие статьи