Перейти к содержимому

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

  • автор:

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

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

Числа в Python

В программировании мы всегда взаимодействуем с данными, которые не являются какой-то абстрактной субстанцией. Все данные разделяются по определенному типу. На предыдущих уроках мы узнали, про строки, списки, словари и о логическом типе данных. Сегодня, поговорим о самом базовом типе данных в Python — числах.

Почему нельзя свалить все данные в одну общую кучу и не заморачиваться с каждым типом по отдельности? Допустим, мы присвоили переменной a цифру 5: a = 5. А теперь представьте, что никакого разделения по типу данных нет. Так что находится в переменной: число или строка? Если 10 — это число, то с ним можно произвести математические действия. А если это строка, то мы имеем дело с текстом и тогда Python задействует совсем другие методы.

# объединение строк (конкатенация)
d = '10'
f = 'негритят'
d + ' ' + f
'10 негритят'

Ключевой момент: У каждого типа данных свои методы.

Цифра 100 написанная без кавычек, относится к числовому типу данных. А цифра '100' в кавычках — к строковому типу. С помощью синтаксиса, мы сообщаем Python, какой у нас тип данных. Числа в Python делятся на два вида: целое число и вещественное.

Целое число

К целым числам (int) относятся все положительные и отрицательные числа без дробной части. Все положительные целые числа называются натуральными.

-80, -10, -4, 0, 1, 2, 20

Вещественное число

У вещественных чисел (float) всегда присутствует дробная часть, а ещё их называют числами с плавающей точкой. Поскольку дробная часть отделяется от целой части, точкой.

Математические операции с числами

Ради математических вычислений в Python и существует числовой тип данных.

Сложение чисел

e = 45 + 55
print(e)
100

Вычитание чисел

Умножение чисел

Деление чисел

У результата деления целого числа на целое, всегда будет дробная часть. Такая особенность обусловлена тем, что в большинстве случаев числа не делятся без остатка.

Целочисленное деление

В результате целочисленного деления, всегда будет целое число. Мы просто отбрасываем остаток. Число 15 поместится целых 2 раза.

Остаток от деления

Ответом будет остаток от деления. При обычном делении, ответ был бы 15.1. Но нам нужен только остаток. Убираем целое число и оставляем 1.

n = 16 % 3
print(n)
1

Возведение числа в степень

Число перед двумя звездочками — это объект, который нужно возвести в степень. Цифра после звездочек обозначает, в какую степень возводим: 4 возводим во вторую степень.

l = 4 ** 2
print(l)
16

В Python есть встроенные математические функции.

Модуль числа

Функция abs() находит модуль числа. Передаем в параметрах одно значение. Если передаваемое значение отрицательное, то abs() вернет положительное число. Модуль числа не может быть отрицательным.

Наименьшее число

Функция min() в Python возвращает самое маленькое число.

Максимальное число

Функция max() вернет самое большое число.

Округление до целого числа

Функция round() округляет до целого числа.

Вывести число в Python

Функция print() выводит числа на экран.

Ввести число в Python

Функция input() считывает вводимое значение пользователем в консоль и сохраняет его в переменной. Но что произойдет, если мы введем какое-нибудь число и затем обратимся к переменной?

Python вывел строку, так как число стоит в кавычках.

Для ввода целого числа, следует обернуть функцию input() в другую функцию int().

Для вещественного числа, соответственно в float().

Как посчитать сумму введенных чисел?

В команде input() можно передавать подсказки.

w = int(input(«Введите первое число: «))
q = int(input(«Введите второе число: «))
summa=w+q
print(summa)

Введите первое число: 6
Введите второе число: 7
13

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

Комментарии ( 0 ):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

Вычисле­ния в python

Хорошего дня! Сегодня мы научимся умножать, делить, вычитать. В каком смысле ты это уже умеешь?! А ты в этом уверен? В любом случае, повто­рение — это мать учения, так что устраивайся по-удобнее, мы начинаем.

Арифмети­ческие операции в python

Вы считаете, что арифме­тиче­ские операции — это просто? Пересчитайте. На самом деле, всё не так страшно, но рас­слабляться не стоит.

Начнём со всем знакомой чет­вер­ки:

print ( 10 + 10 )
# 10
print ( 10 — 5 )
# 5
print ( 11 * 7 )
# 77
print ( 10 / 2 )
# 5.0

Никаких неожиданностей, правда? Не совсем, посмотрите внимательно на операцию деле­ния. Заметили? Мы разделили целое число на его делитель, но несмотря на это, результат имеет тип float . Взглянем на операцию деления чуть более пристально:

print ( 10 / 2 )
# 5.0
print ( 100 / 3 )
# 33.333333333333336
print ( 21 / 4 )
# 5.25
print ( 23 / 7 )
# 3.2857142857142856

Обратите внимание на деление 100 / 3 . Выполнив эту операцию, мы получили очень интересный результат 33.333333333333336 . На конце 6 ?! Вспомним перевод числа в двоичную систему счисления. То есть мы можем представить любое число в виде ноликов и единичек, например:

37 = 2^5 + 2^2 + 2^0 = 100101 .

А как обстоит дело с дробями? Точно также:

0.75 = 0.5 + 0.25 = 1/2 + 1/4 = 0.11

Возникает вопрос, как пере­вес­ти в двоичную систему такие дроби: 1/3

1/3 = 1/4 + 1/8 + 1/16 + 1/32 + .

Это может продолжаться беско­неч­но долго. Поэтому python прерывает выполнение таких вычислений и часто выдает такие приколы:

print ( 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 )
# 0.7999999999999999
print ( 0.1 + 0.2 )
# 0.30000000000000004
print ( 7 / 3 )
# 2.3333333333333335

Еще немного математики. Математика в каждый дом!

# Возведение в степень
print ( 10 * * 2 )
# 100
print ( 2 * * 4 )
# 16
print ( 3 * * 0.5 )
# 1.7320508075688772
print ( 3 * * — 2 )
# 0.1111111111111111

# Остаток от деления
print ( 11 % 4 )
# 3
print ( 101 % 7 )
# 3
print ( 34 % 5 )
# 4

# Деление нацело
print ( 20 // 4 )
# 5
print ( 129 // 11 )
# 11
print ( 100 // 61 )
# 1

Операции сравнения в python

Операции сравнения в отличие от арифметические имеют всего два результата: True и False . Чаще всего такие операции используются в условии циклов, условных оператов, а также в некоторых функциях, например, filter .

# Операция равенства: True, если X равен Y
print ( 10 == 10 )
# True
print ( 666 == 661 )
# False

# Операция неравенства: True, если X не равен Y
print ( 666 != 661 )
# True
print ( 666 != 666 )
# False

# Операция больше: True, если X больше Y
print ( 120 > 2 )
# True
print ( 1000 > 1999 )
# False

# Операция меньше: True, если X меньше Y
print ( 121 120 )
# False
print ( 0 1 )
# True

# Операция меньше или равно: True, если X меньше или равен Y
print ( 6 6 )
# True
print ( 5 2 )
# False

# Операция больше или равно: True, если X больше или равен Y
print ( 1000 >= 10000 )
# False
print ( 9999 >= 9999 )
# False

Логические операции в python

Логические операции, как и операции сравнения, имеют всего два возможных результата: True и False . Используются для объединения операций сравнения в условиях циклов, условных оператов, а также в некоторых функциях, например, filter .

# Оператор «and» или конъюнкция.
# True, если и выражение X, и выражение Y равны True
print ( 10 == 10 and 10 > 2 )
# True
print ( 666 == 661 and 9 > 0 )
# False

# Оператор «or» или дизъюнкция.
# True, если или выражение X, или выражение Y равны True
print ( 666 == 661 or 9 > 0 )
# True
print ( 666 == 661 or 9 0 )
# False

# Оператор «not» или инверсия меняет значение на противоположное.
# True, если выражение X равно False
print ( not 120 > 2 )
# False
print ( not 1000 999 )
# True
print ( not ( 121 121 and 10 == 2 ))
# True

Округление чисел в python

Всё дело в округлении! В python есть несколько заме­ча­тель­ных функций, которые округ­ляют число до указанного знака. Одной из таких функций является round :

pi = 3.14159265358979323846264338327
print (round(pi, 1 ))
# 3.1
print (round(pi, 2 ))
# 3.14
print (round(pi, 3 ))
# 3.12
print (round(pi, 4 ))
# 3.1416
print (round(pi, 10 ))
# 3.1415926536
print (round(pi, 15 ))
# 3.141592653589793

Рассмотрим любопытный пример:

print (round( 2.5 ))
# 2
print (round( 3.5 ))
# 4

Если на вашем лице застыл немой вопрос: «почему?», то я вас понимаю. В школе нас учили, что дроби 1.1, 1.2, 1.3, 1.4 округляются до единицы, а 1.5, . 1.9 до двойки. Но python думает по-другому. Есть два типа округления: арифметическое и банковское. Именно арифметическому округлению вас учили в школе. Python использует как раз-таки банковское округление, его еще называют округлением до ближайшего четного. Приведу еще несколько примеров:

print (round( 10.51213 ))
# 11
print (round( 23.5 ))
# 24
print (round( 22.5 ))
# 22

Модуль math

Модуль math представляет собой набор математических формул. Рассмотрим несколько примеров:

# Синус 3.14 радиан
print (math. sin ( 3.14 ))
# 0.0015926529164868282

# Косинус 1.1 радиан
print (math. cos ( 1.1 ))
# 0.4535961214255773

# Возведение экспоненты в 3 степень
print (math. exp ( 3 ))
# 20.085536923187668

# Натуральный логарифм 61
print (math. log ( 61 ))
# 4.110873864173311

# Факториал четырех
print (math. factorial ( 4 ))
# 24

# Извлечение квадратного корня
print (math. sqrt ( 9 ))
# 3.0

# Алгоритм Евклида для чисел 20 и 19
print (math. gcd ( 20 , 19 ))
# 1

# Вычисление гипотенузы треугольника с катетами 3 и 4
print (math. hypot ( 3 , 4 ))
# 5.0

# Перевод радиан в градусы
print (math. degrees ( 1.572 ))
# 90.06896539456541

# Факториал четырех
print (math. fmod ( 20 , 3 ))
# 24

И это далеко не всё! Остальные функции я предлагаю вам протестировать самостоятельно : )

Python с абсолютного нуля. Учимся кодить без скучных книжек

Не­дав­но мы про­води­ли опрос о том, какой курс по Python был бы инте­рес­нее читате­лям. Две пер­вые строч­ки с боль­шим отры­вом в нем заняли вари­анты «для хакера» и «Python с нуля». Узнав о таком положе­нии дел, мы немед­ленно заказа­ли статью о том, как начать прог­рамми­ровать на Python. Если она будет иметь успех, то может прев­ратить­ся в целую серию. Отли­чие нашего под­хода — в том, что мы объ­ясня­ем все живым язы­ком и даем нес­кучные при­меры. В общем, обу­чение в фир­менном сти­ле «Хакера»!

И, пос­коль­ку это экспе­римент, статья дос­тупна без плат­ной под­писки.

Ес­ли у тебя на ком­пе есть сов­ремен­ный дис­три­бутив Linux, то в него уже вхо­дит Python 3, а писать пер­вые прог­раммы будет удоб­но в IDLE — прос­том редак­торе кода, который при­лага­ется к Python. В Ubuntu, что­бы уста­новить его, набери в кон­соли

В Windows при уста­нов­ке Python обя­затель­но отметь на пер­вом экра­не уста­нов­щика галоч­ку Add to Path, что­бы мож­но было запус­кать python3 из коман­дной стро­ки в любом удоб­ном мес­те.

За­пус­тив IDLE, зай­ди в Options → Configure IDLE, перей­ди на вклад­ку General и пос­тавь галоч­ку на пун­кте Open Edit Window, наж­ми ОK и переза­пус­ти IDLE. Теперь мож­но писать прог­раммы, сох­ранять их и запус­кать кла­вишей F5. Ну что, пог­нали?

Переменные

В любом язы­ке прог­рамми­рова­ния есть такая шту­ка, как перемен­ные. Это как в школь­ной алгебре: вот перемен­ная a = 1 , вот перемен­ная b = 2 . То есть это такие абс­трак­тные шту­ки, внут­ри них лежит зна­чение, которое может менять­ся — нап­ример, ког­да ты пишешь пос­ле перемен­ной знак рав­но и какое‑то новое зна­чение.

Ну, то, что print( a) — это коман­да, которая печата­ет на экра­не текущее зна­чение перемен­ной, ты уже понял. Ты написал пос­ле зна­ка рав­но сно­ва саму перемен­ную + 2 , то есть сна­чала в перемен­ной было зна­чение 2, потом к это­му зна­чению при­бави­ли еще 2. На экра­не гор­до кра­сует­ся 4. Поз­драв­ляю, два и два сло­жили!

А если изна­чаль­но неиз­вес­тно, какие чис­ла надо скла­дывать? Тог­да приш­лось бы спер­ва поп­росить юзе­ра ввес­ти их в кон­соли и нажать Enter. Давай так и сде­лаем:

Внут­ри ско­бочек у input ты пишешь пояс­нение для юзе­ра, что кон­крет­но его про­сят ввес­ти. Но вот беда, по умол­чанию все, что вво­дит­ся через input, счи­тает­ся не чис­лом, а стро­кой, поэто­му, преж­де чем скла­дывать количес­тво лит­ров пива, нуж­но сна­чала пре­обра­зовать вве­ден­ные стро­ки в чис­ла с помощью фун­кции int().

Сло­во «фун­кция» дол­жно быть зна­комо тебе из матема­тики. В скоб­ках мы пишем то, что она при­нима­ет (аргу­мент), а на выходе будет резуль­тат. Python сна­чала под­менит перемен­ную на ее текущее зна­чение ( int( a) на, ска­жем, int( «5») , а потом фун­кцию — на резуль­тат ее выпол­нения, то есть 5. Быва­ет, что фун­кция ничего не воз­вра­щает, толь­ко что‑то дела­ет. Нап­ример, print( ) толь­ко печата­ет аргу­мент.

Окей, пре­обра­зовал стро­ки в чис­ла, положил их в перемен­ную c , а даль­ше‑то что за треш внут­ри ско­бок у print ? Тут скла­дыва­ются стро­ки (стро­ки всег­да пишут­ся внут­ри кавычек), пояс­няющие, что имен­но выводит­ся на экран, а резуль­тат сло­жения переда­ется в фун­кцию print( ) .

Что­бы стро­ки без­болез­ненно сло­жились с перемен­ной c , в которой лежит чис­ло, надо пре­обра­зовать его в стро­ку фун­кци­ей str( ) — так же как мы прев­ращали стро­ки в чис­ла, толь­ко наобо­рот.

Во­обще, типов перемен­ных мно­го, но суть ты уло­вил — что­бы про­изво­дить с перемен­ными какие‑то дей­ствия, нуж­но их сна­чала при­вес­ти к одно­му типу — к стро­ково­му, или к чис­ловому, или еще к какому‑нибудь. Если с этим не замора­чивать­ся, Python сло­жит не чис­ла, а стро­ки и вве­ден­ные 2 и 3 лит­ра пива в сум­ме дадут не 5, а целых 23. Хорошо бы так было в реаль­нос­ти!

Вот еще при­мер­чик, рас­счи­тыва­ющий, сколь­ко тебе еще пить пиво, исхо­дя из сред­ней про­дол­житель­нос­ти жиз­ни в Рос­сии:

Здесь мы вызыва­ем фун­кцию input( ) , что­бы получить зна­чение, вычита­ем его из 73 (сред­няя про­дол­житель­ность жиз­ни рос­сияни­на), не забыв прев­ратить стро­ку в чис­ло, а потом печата­ем резуль­тат, прев­ратив чис­ло обратно в стро­ку и сло­жив с дру­гими стро­ками.

Итак, ты узнал, что такое целочис­ленные и стро­ковые перемен­ные, что эти типы мож­но пре­обра­зовы­вать друг в дру­га коман­дами int( ) и str( ) . К тому же теперь ты уме­ешь получать перемен­ные от поль­зовате­ля с помощью фун­кции input( ‘Введите что-то’) и печатать резуль­таты с помощью фун­кции print( ) .

Условия

В осно­ве любой прог­раммы лежат усло­вия. В зависи­мос­ти от того, выпол­няют­ся они или не выпол­няют­ся, прог­рамма может пой­ти по одно­му или дру­гому пути. Пред­ставь, ты едешь на машине и смот­ришь на часы: если уже есть десять вечера, то повора­чива­ешь домой, если нет, то мож­но заехать в гос­ти. Точ­но так же работа­ет и прог­рамма: про­веря­ет какое‑то зна­чение и сво­рачи­вает туда или сюда и выпол­няет соот­ветс­тву­ющий кусочек кода.

На англий­ском if зна­чит «если», а else — «ина­че» или «в про­тив­ном слу­чае». В строч­ке пос­ле if идет усло­вие, которое мы про­веря­ем. Если оно вер­но, выпол­няет­ся пер­вый блок кода (он отде­лен четырь­мя про­бела­ми вна­чале). Если невер­но, то тот, что пос­ле else: .

Бло­ки кода в Python отде­лают­ся отсту­пами. Отступ на самом деле может быть любым, нап­ример некото­рые пред­почита­ют исполь­зовать вмес­то четырех про­белов кла­вишу Tab. Глав­ное — не сме­шивать в одной прог­рамме отсту­пы раз­ного типа. Если уж начал исполь­зовать четыре про­бела, то исполь­зуй по всей прог­рамме, а то Python будет на тебя ругать­ся и уни­жать.

Еще один важ­ный момент здесь — это знак равенс­тва в усло­вии. Он пишет­ся как двой­ное «рав­но» ( == ) и этим отли­чает­ся от прис­воения — оди­нар­ного «рав­но».

Фун­кция lower(), преж­де чем срав­нивать усло­вие, дела­ет все бук­вы в стро­ке малень­кими, потому что глу­пый юзер может ввес­ти сло­во YES с горящим Caps Lock, и это надо пре­дус­мотреть заранее.

На самом деле lower( ) — не прос­то фун­кция, а метод клас­са string (стро­ка). Имен­но поэто­му он вызыва­ется через точ­ку пос­ле перемен­ной, которая содер­жит стро­ку. О клас­сах и методах мы погово­рим как‑нибудь в дру­гой раз, а пока прос­то запом­ни, что некото­рые фун­кции вызыва­ются таким обра­зом.

Да­вай поп­робу­ем сде­лать усло­вие для про­вер­ки логина и пароля, исполь­зуя опе­ратор И, который пишет­ся как and . Он нужен для того, что­бы про­верить одновре­мен­но выпол­нение пер­вого и вто­рого усло­вия.

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.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Школа онлайн с государственным аттестатом