Структуры данных
Список. Создание списка путем добавления элементов в конец списка. Просмотр списка
-
Какие операции требуется выполнить для вставки в список его элемента?
Теперь попробуем подытожить наши рассуждения. Оформим создание списка в виде процедуры, в которой его элементы вводятся с клавиатуры.
Procedure Init(Var u : Ukazatel);
Var
x : Ukazatel;
Digit : integer;
Begin
Writeln(‘Введите список ‘);
u := Nil;
Writeln (‘Введите элементы списка. Конец ввода 0’);
Read (Digit);
if Digit <> 0
then
Begin
New(x);
x^.Next := Nil;
x^.Data := Digit;
u := x;
Read (Digit);
while Digit<>0 do
Begin
New(x^.Next);
x := x^.Next;
x^.Next := Nil;
x^.Data := Digit;
Read(Digit);
End;
End;
Writeln;
End;
Рассмотрите формирование списка несколько другим способом.
| Procedure Init(Var u : Ukazatel); Var x, y : Ukazatel; Digit : integer; Begin Writeln(‘Введите список ‘); u := Nil; Writeln (‘Введите элементы списка. Конец ввода 0’); Read (Digit); while Digit<>0 do Begin New(y); y^.Next := Nil; y^.Data := Digit; if u=Nil then u := y else x^.Next := y; x := y; Read(Digit); End; Writeln; End; |
Задание. Разберитесь, как работает данная процедура.
Просмотр списка
Просмотр элементов списка осуществляется последовательно, начиная с его начала. Указатель р поочередно устанавливается на первый, второй, и т.д. элементы списка до тех пор, пока весь список не будет пройден. При этом с каждым элементом списка выполняется операция вывода поля данных на экран. Начальное значение р – адрес первого элемента списка p^. Если р указывает на конец списка, то его значение равно Nil, то есть
| while p<>Nil do Begin Write(p^.Data, ‘ ‘); p := p^.Next; End |
Задание. Составьте программу, содержащую процедуру создания списка путем вставки элементов в его конец и процедуру просмотра списка и вывода на экран его элементов. Процедуры должны содержать параметр, в который передается начало списка.
Удаление элементов списка по условию
Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 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
Удаление элементов списка
Если вам нужно удалить элементы списка из списка для повседневного обслуживания или по другим причинам, их можно легко удалить. Для удаления элементов списка у вас должен быть уровень разрешений Изменение или более высокий. Если у вас нет такого уровня разрешений, лучше не перетасковываю, а архивуйте элементы. Если вы удалили список случайно, его можно восстановить из корзины.
Удаление элементов из списка
Примечание: Ваш экран выглядит не так, как в приведенных здесь примерах? Вероятно, ваш администратор задал для списка классический режим или вы используете более раннюю версию. В таком случае см. статью Добавление, изменение и удаление элементов списка. Если вы являетесь владельцем списка, владельцем сайта или администратором, пошаговые инструкции по настройке представления, используемого по умолчанию, см. в статье Выбор нового или классического интерфейса для библиотек документов и списков.
- Откройте список, в котором вы хотите удалить элемент. Если вы не можете найти список, выберите Содержимое сайта, а затем откройте список,
- Выделите один или несколько элементов.
- На панели команд списка выберите команду Удалить .
- Когда вам будет предложено подтвердить запрос, выберите ОК.
Восстановление удаленных элементов из корзины
Элемент, удаленный из списка, часто можно восстановить из корзины.
- Откройте список, в котором вы хотите удалить элемент. Если вы не можете найти список, выберите Контент сайтаи откройте список.
- Выберите Корзина на левой панели. Если корзина не находится на левой панели, выберите Содержимое сайта ,а затем щелкните Корзина.

- Чтобы восстановить элементы списка, выберите их и выберите восстановить
. - Если вы не видите элемент или элементы, которые вы ищете, в нижней части страницы выберите корзину второго этапа. Если вы по-прежнему не видите искомые элементы, вероятно, срок их хранения истек и они уже удалены из корзины.
Удаление элементов из списка по условию. Как это работает?
Имеется кусок кода, который должен удалять все элементы из списка, которые меньше 5. Однако этот код работает не верно. Можете ли вы без или с использованием консоли указать где ошибка и как нужно делать.
nums = [1,2,5,10,3,100,9,24] for i in nums: if i < 5: nums.remove(i) nums >>>[2, 5, 10, 100, 9, 24]
Проверяет ли этот код на то, что элемент по своему значению менешь 5? В первой итерации 1 конечно меньше 5. Затем программа удаляет единицу, но в тоже время путаются индексы. На второй итерации она проверяет уже 5 а не 2. От этого и ошибка.
Для решения этой задачи можно использовать несколько вариантов.
Первый: создать пустой массив и дописывать в него, а именно:
nums = [1,2,5,10,3,100,9,24] newnums = [] for i in nums: if i >= 5: newnums.append(i) newnums >>>[5, 10, 100, 9, 24]
Второй: Используя list comprehension
nums = [1,2,5,10,3,100,9,24] newnums = [i for i in nums if i>=5] newnums >>>[5, 10, 100, 9, 24]
Нам нравится больше спосом с list comprehension. Но решать всегда вам.
