Удаление элементов списка по условию
Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 35-ти и меньше 65-ти). Удаляемые значения сохранить в другом списке.
Решение задачи на языке программирования Python
Алгоритм решения задачи выглядит простым. Достаточно перебрать элементы списка и удалить те, которые удовлетворяют условию. Однако при удалении элемента на его место становится следующий, но поскольку мы переходим к следующей ячейке, то пропускаем проверку того, что стал на место удаленного. Таким образом, цикл for , в теле которого перебираются элементы, использовать нельзя, так как меняется количество элементов списка.
a = [96, 72, 44, 29, 97, 69, 25, 12] print("A =", a) b = [] for i in a: if 20 i 90: a.remove(i) b.append(i) print("A =", a) print("B =", b)
A = [96, 72, 44, 29, 97, 69, 25, 12] A = [96, 44, 97, 25, 12] B = [72, 29, 69]
В примере число 44 оказалось пропущенным, так как когда было удалено 72, то 44 стало на его место. На следующей итерации цикла проверялось содержимое третьей ячейки, в которой уже стояло число 29. То же самое касается числа 25, перед которым было удалено 69.
В Python удалять элементы списка можно не только с помощью метода remove , также инструкцией del , при которой указывается сам список и индекс удаляемого элемента.
Также будем использовать цикл while , измеряя на каждой его итерации длину списка, индекс же увеличивать только в том случае, если удаления элемента не произошло.
import random a = [] for i in range(10): n = round(random.random() * 100) a.append(n) print("A =", a) b = [] i = 0 while i len(a): if 35 a[i] 65: b.append(a[i]) del a[i] else: i += 1 print("A =", a) print("B =", b)
Примеры выполнения программы:
A = [66, 57, 72, 65, 37, 67, 23, 16, 30, 72] A = [66, 72, 65, 67, 23, 16, 30, 72] B = [57, 37]
A = [1, 65, 85, 62, 2, 1, 52, 63, 36, 94] A = [1, 65, 85, 2, 1, 94] B = [62, 52, 63, 36]
Более оригинальным способом решения задачи является перебор элементов списка с конца. В этом случае индекс меняется от большего к меньшему. При этом если происходит удаление элемента и сокращение длины списка, это не оказывает никакого влияния на элементы (их индексы), стоящие до удаляемого значения.
from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] i = len(a) - 1 while i >= 0: if 35 a[i] 65: b.insert(0, a[i]) del a[i] i -= 1 print("A =", a) print("B =", b)
Здесь вместо метода append() используется insert() , чтобы элементы во втором списке шли в том же порядке, в котором они были в первом, а не задом наперед.
В случае перебора с конца также можно использовать цикл for , если знать о том, что с помощью функции range() можно создавать диапазоны от большего числа к меньшему.
from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] for i in range(len(a)-1, -1, -1): if 35 a[i] 65: b.insert(0, a[i]) del a[i] print("A =", a) print("B =", b)
Выражение range(len(a)-1, -1, -1) при длинне списка a в 10 элементов означает, что будет получен диапазон, первый элемент которого 9, последний 0 (значение -1 в диапазон не входит). Третий аргумент в функции range() является шагом, то есть здесь следующий элемент получается из предыдущего вычитаем единицы.
X Скрыть Наверх
Решение задач на Python
Условие
Выведите все четные элементы списка. При этом используйте цикл for , перебирающий элементы списка, а не их индексы!
Решение
s=input() a=[int(s) for s in s.split()] for i in a: if int(i)%2 == 0: print(i, end=' ')
Комментарии
Аноним :
Немного проще:
a = input().split()
for i in range(0, len(a)):
if int(a[i]) % 2 == 0:
print(a[i], end=’ ‘)
Аноним :
В задании сказано, что нужно использовать перебор списка а не индекса
Виктор :
Странно, в условии сказано — перебирайте элементы, а не индексы, а в решении автор перебирает все-таки индексы! Да и решение неправильное в целом, сказано же — четные элементы, а вовсе не элементы с четными номерами. Скажем, из строки исходных данных «1 2 3 4 10 11 13 17 19» эта программа выберет числа 1,3,10,13,17,19, а по смыслу задачи это должно быть 2,4,10.
Вот как надо:
ar = [int(s) for s in input().split()]
print(*[k for k in ar if k %2 ==0])
Python удаление элементов из массива
Здорова юные линуксойды! У меня такая задача нужно все четные элементы массива удалить. вот код:
for i in range(len(a)):#a-- это массив if a[i]%2==0: a.remove(a[i]) #он выводит list index out of range. Думаю это связано с удалением элемента из списка. Кто знает решение плиз помогите

levon12341
20.10.16 09:51:23 MSK

умаю это связано с удалением элемента из
эмм, напомни, в чем помощь нужна ? Очевидно что это связано с удалением. Потому что он идет по длине изначального списка (не массива, кстати), по списку который становится короче.
рекомендую просто генерировать новый. Например так
a = [x for x in a if x%2!=0]
Dred ★★★★★
( 20.10.16 09:57:56 MSK )
Это происходит от того, что после удаления элемента массива его длина и индексы элементов ВНЕЗАПНО меняются, а предел цикла — нет.
Как удалить нечетные числа из списка, а четные разделить на 2
Есть список a = [1, 2, 3, 4, 5, 6]. Требуется удалить из этого списка все нечетные значения, а четные разделить на 2. Всю операции производить с текущим списком, второй список создавать нельзя. Вывести измененный список в консоль.
Лучший ответ
Если СОВСЕМ без дополнительных массивов, то:
a = [1, 2, 3, 4, 5, 6]
for i in range(len(a) - 1, -1, -1): # только так - от конца к началу
if a[i] % 2: del a[i]
else: a[i] //= 2
print(*a)
Если же без дополнительных переменных, содержащих массивы, то:
a = [1, 2, 3, 4, 5, 6]
a = [v // 2 for v in a if v % 2 == 0]
print(*a)
Тимофей БарановУченик (137) 1 год назад
А что означает a[i]?
Остальные ответы
Нечётные суммировать.
a = [1, 2, 3, 4, 5, 6]
a = list(filter(lambda x: not x % 2, a))
a[:] = [int(x / 2) for x in a]
print(*a)
Похожие вопросы