Содержание:
Часть I: Коллекции: Списки / массивы
- Cписки — это изменяемые последовательности в отличие от строк.
- Представим строку как объект в памяти, в этом случае, когда над строкой выполняются операции конкатенации и повторения, то сама строка не меняется, но в результате выполнения операции в другом месте памяти создается другая строка.
Списки (массивы) в Питоне, как и в других языках программирования, — это определенное количество элементов, которые имеют общее имя, и каждый элемент имеет свой индекс — порядковый номер. В отличие от массивов в других языках, у списков нет никаких ограничений на тип переменных, поэтому в них могут храниться объекты разного типа.
L - список целых чисел: L = [25, 755, -40, 57, -41]
Списки являются упорядоченными последовательностями, которые состоят из различных объектов (значений, данных), заключающихся в квадратные скобки [ ] и отделяющиеся друг от друга с помощью запятой.
В строку нельзя добавить новый символ или удалить существующий, не создав при этом новой строки.
Так, например, в Питоне нельзя переприсваивать значение для отдельных символов строки.
Программа выдаст ошибку!
s="aaa"; s[1]="b"; print(s1) |
Изменять строку можно только, работая с ней, как с объектом (метод replace
, например):
s1="breKeKeKeKs"; s1=s1.replace('Ke','XoXo',2) s1 # breXoXoXoXoKeKs |
Что касается списков, то при выполнении операций другие списки могут не создаваться, при этом изменяется непосредственно оригинал.
Из списков можно удалять и добавлять новые элементы.
Создание списков на Python
-
Создать список можно несколькими способами. Рассмотрим их.
- Так выглядит в коде Python пустой список:
- Примеры создания списков со значениями:
1. Получение списка через присваивание конкретных значений
s = [] # Пустой список |
l = [25, 755, -40, 57, -41] # список целых чисел l = [1.13, 5.34, 12.63, 4.6, 34.0, 12.8] # список из дробных чисел l = ["Sveta", "Sergei", "Ivan", "Dasha"] # список из строк l = ["Москва", "Иванов", 12, 124] # смешанный список l = [[0, 0, 0], [1, 0, 1], [1, 1, 0]] # список, состоящий из списков l = ['s', 'p', ['isok'], 2] # список из значений и списка |
2. Списки при помощи функции List()
Получаем список при помощи функции List()
empty_list = list() # пустой список l = list ('spisok') # 'spisok' - строка print(l) #['s', 'p', 'i', 's', 'o', 'k'] - результат - список |
3. Создание списка при помощи функции Split()
- Используя функцию split в Питон можно получить из строки список. Рассмотрим пример:
stroka ="Hello, world" # stroka - строка lst=stroka.split(",") # lst - список lst # ['Hello', ' world'] |
4. Генераторы списков
- В python создать список можно также при помощи генераторов, — это довольно-таки новый метод:
- Пример 1:
- Пример 2:
- Пример 3:
- Пример 4 -> добавим условие для выбора только четных чисел из примера 3:
- Пример работы со строкой:
- Случайные числа в списке:
Сложение одинаковых списков заменяется умножением:
# список из 10 элементов, заполненный единицами l = [1]*10 # список l = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] |
l = [i for i in range(10)] # список l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
l = [i*2 for i in range(10)] # список l = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] |
l = [i*2 for i in range(10) if i % 2 == 0] # список l = [0, 4, 8, 12, 16] |
c = [c * 3 for c in 'list'] print (c) # ['lll', 'iii', 'sss', 'ttt'] |
Заполнить список квадратами чисел от 0 до 9, используя генератор списка.
✍ Решение:
l = [i*i for i in range(10)] |
еще пример:
l = [(i+1)+i for i in range(10)] print(l) # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19] |
from random import randint l = [randint(10,80) for x in range(10)] # 10 чисел, сгенерированных случайным образом в диапазоне (10,80) |
Создайте список целых чисел от -20 до 30 (генерация).
Результат:
[-20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
Создайте список целых чисел от -10 до 10 с шагом 2 (генерация list).
Результат:
[-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10]
Создайте список из 20 пятерок (генерация).
Результат:
[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
Создайте список из сумм троек чисел от 0 до 10, используя генератор списка (0 + 1 + 2, 1 + 2 + 3, …).
Результат:
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33]
Заполните массив элементами арифметической прогрессии. Её первый элемент, разность и количество элементов нужно ввести с клавиатуры.
* Формула для получения n-го члена прогрессии: an = a1 + (n-1) * d
Простейшие операции над списками
- Списки можно складывать (конкатенировать) с помощью знака «+»:
- Операция повторения:
l = [1, 3] + [4, 23] + [5] # Результат: # l = [1, 3, 4, 23, 5] |
[33, -12, 'may'] + [21, 48.5, 33] # [33, -12, 'may', 21, 48.5, 33] |
или так:
a=[33, -12, 'may'] b=[21, 48.5, 33] print(a+b)# [33, -12, 'may', 21, 48.5, 33] |
[[0,0],[0,1],[1,1]] * 2 # [[0, 0], [0, 1], [1, 1], [0, 0], [0, 1], [1, 1]] |
Для списков операция переприсваивания значения отдельного элемента списка разрешена!:
a=[3, 2, 1] a[1]=0; print(a) # [3, 0, 1] |
Можно!
В строке записана сумма натуральных чисел: ‘1+25+3’. Вычислите это выражение. Работать со строкой, как со списком.
Начало программы:
s=input('введите строку') l=list(str(s)); |
В питоне не нужно явно указывать размер списка или вручную выделять на него память. Длину списка можно узнать с помощью встроенной функции
len
:
names = ['Ivan', 'Marie', 'Peter', 'Max'] print (len(names)) # 4
Ввод списка (массива) в языке Питон
- Простой вариант ввода списка и его вывода:
- Как уже рассмотрено выше, список можно выводить целым и поэлементно:
L=[] L = [ int(input()) for i in range(5) ] # при вводе 1 2 3 4 5 print (L) # вывод: 1 2 3 4 5 |
Функция int здесь используется для того, чтобы строка, введенная пользователем, преобразовывалась в целые числа.
# вывод целого списка (массива) print (L) # поэлементный вывод списка (массива) for i in range(5): print ( L[i], end = " " ) |
Необходимо задать список (массив) из шести элементов; заполнить его вводимыми значениями и вывести элементы на экран. Использовать два цикла: первый — для ввода элементов, второй — для вывода.
Замечание: Для вывода через «,» используйте следующий синтаксис:
print ( L[i], end = ", " ) |
Пример результата:
введите элементы массива: 3.0 0.8 0.56 4.3 23.8 0.7 Массив = 3, 0.8, 0.56, 4.3, 23.8, 0.7
Заполните список случайными числами в диапазоне 20..100 и подсчитайте отдельно число чётных и нечётных элементов. Использовать цикл.
Замечание: работа со случайными числами.
Пример результата:
9 5 4 22 23 7 3 16 16 8 Минимальный элемент списка L[7]=3 |
Часть II: Другие операции над списками при помощи функций и методов
- Функция join() — соединение элементов через определенный символ:
- Функция split([sep]) — возвращает список подстрок, получающихся разбиением строки a разделителем sep:
- минимальный и максимальный элементы списка;
- сумму и среднее арифметическое;
- второй минимальный элемент (второй по минимальности).
- Добавление элемента,
append()
: - Добавление элемента,
extend()
: - Удаление элемента,
remove()
: - Удаление элемента по индексу,
del
: - Пример палиндрома: казак, ABBA
- Использовать функции.
- Поскольку при присваивании одного списка другому, изменение первого ведет к аналогичному изменению второго списка, то необходимо использовать копию (
copy
). - Заполнить список (массив) случайными числами
- Запросить для ввода минимум и максимум диапазона
- Найти индексы элементов, значения которых входят в диапазон. Добавлять найденные индексы к новому списку
- Вывести общее число найденных индексов (функция len()) и отдельно все индексы
a=[1,7,3,88,33] a.sort() #[1,3,7,33,88] - сортировка a.reverse() #[88,33,7,3,1] - обратная сортировка a.index(7) #2 - индекс элемента a.clear() # - очистка списка len(a) # - длина списка sum(a) # - суммирование элементов |
lst=['11','22','33'] lst="-".join(lst)# '11-22-33' |
str="1-2-3-4" s1=str.split("-") # ['1','2','3','4'] |
Дан список из 5 различных элементов. Используя функции (не использовать цикл), необходимо найти и вывести:
Начало программы:
lst=[4,5,2,3,4] |
Добавление и удаление элементов списка
>>> a=[] >>> a.append('444') # ['444'] |
Поиск нечетных элементов в списке mas и копирование их в список B.
✍ Решение:
mas = [1,5,2,7,6,9] B = [] for x in mas: if x % 2 != 0: B.append(x) # [1, 5, 7, 9] |
Короткое решение:
mas = [1,5,2,7,6,9] B = [x for x in mas if x % 2 != 0] # [1, 5, 7, 9] |
names = ['Ivan', 'Marie', 'Peter', 'Max'] names.extend(['Kat', 'Mike']) print(names) #['Ivan', 'Marie', 'Peter', 'Max', 'Kat', 'Mike'] |
names += ['Nick'] print(names) #['Ivan', 'Marie', 'Peter', 'Max', 'Kat', 'Mike', 'Nick'] |
a=['asd','444','555','77'] a.remove('444') # ['asd', '555', '77'] |
a=['asd','444','555','77'] del a[0] # ['444', '555', '77'] |
При копировании списков, т.е. присваивании одного списка другому, изменение первого списка влечет за собой изменение второго списка. Так как эти объекты связаны одной областью памяти (ссылка на список).
mas1 =[1, 2, 3] mas2 = mas1 # создается ссылка на список mas1[0] = 4 print(mas2) #[4, 2, 3] |
Чтобы создать не ссылку на список, а копию списка можно использовать либо срез либо функцию copy.
mas2 = mas1[:] # используем срез |
import copy mas1 =[1,2,3] mas2 = copy.copy(mas1) |
Примечание:
Начало программы:
import copy stroka=input('введите слово') lst=list (stroka) # конвертируем строку в список |
Проверить, содержит ли список некоторый объект, можно с помощью ключевого слова «in
«:
names = ['Ivan', 'Marie', 'Peter', 'Inna'] print('Marie' in names) # true |
Генерация случайных чисел при работе со списками
Вспомним, как работать с модулем random
.
Встроенный модуль Питона random позволяет генерировать псевдослучайные числа.
Модуль random включает в себя функцию random, которая возвращает действительное число в диапазоне от 0.0 до 1.0. Каждый раз при вызове функции возвращается число из длинного ряда.
Пример:
import random for i in range(10): x = random.random() print (x) # 0.5185207383774904 0.78283351055836 0.23601341583293534 ... |
Чтобы получить случайное число между 0.0 и верхней границей high, просто умножьте x на high.
Например, от 0.0 до 15.0:
import random for i in range(10): x = random.random() print (x * 15) # 11.075319687990554 7.152253113207329 ... |
Для того, чтобы получить псевдослучайное целое число:
import random random.randint(<начало>,<конец>) |
Для того, чтобы получить псевдослучайное вещественное число:
import random random.uniform(<начало>,<конец>) |
Еще пример:
from random import randint l = [randint(10,80) for x in range(10)] |
Найдите в массиве все простые числа и скопируйте их в новый массив.
Решить задачу поиска среднего значения в списке из N элементов (вводимых в виде строк). Использовать метод добавления элементов списка и суммирования элементов
Цикл for при работе со списками
mylist=[1,2,3,4,5] for item in mylist: item = 0 # mylist не меняется! print(mylist) # [1, 2, 3, 4, 5] n=5 for i in range(n): mylist[i] = 0 # mylist меняется print(mylist) # [0, 0, 0, 0, 0] |
✍ Решение:
Решать данную задачу на языке Python мы будем «классическим» вариантом — брать по очереди элементы списка и сравнивать каждый элемент со стоящими за ним. При первом же совпадении элементов делается вывод, что в списке есть одинаковые элементы, и работа программы завершается.
Для выхода из цикла будем использовать метод quit()
import random m = 6 mass=[] k=0 j=0 for i in range(m): mass.append(random.randint(-10,10)) print(mass[i]) # -10 0 -8 0 -10 1 for i in mass: k=k+1 for j in range(k,m): # j = 0 -8 0 -10 -> quit if (i==mass[j]): # -10==0 -10==-8 -10==0 -10==-10 -> quit print('yes') quit() |
Алгоритм:
После того, как элемент с подходящим значением добавлен в новый список – удалять его из исходного списка
* Использовать цикл while , функцию len()
Как делать задание 4
Тоже не понял, как сделать по-простому, сделал » в лоб» xD
l = [i for i in range(11)]
print (l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for i in range(len(l)-2):
l[i] = str(l[i]) +’+’+ str(l[i+1]) +’+’+ str(l[i+2])
l.remove(9)
l.remove(10)
print(l)
Держите мое извращение по четвертому заданию ребзя х)
a = 0
b = a+1
c = b+1
for i in range(10):
print(a,’+’ , b,’+’, c)
a+=1
b+=1
c+=1
if c > 10:
break
def answer4_4(col):
for n in range(1,col):
n0=n-1
n1=n+1
sum_n=n0+n+n1
print(sum_n)
answer4_4(30)
for n in (range(1,int(input(«введите границу»)))): print((n-1)+(n)+(n+1))
Или так если любите по короче
for n in (range(1,int(input(«введите границу»)))): print((n-1)+(n)+(n+1))
answer4_4
Здравствуйте!. может ли кто-то помочь с таким заданием: В не рассортированный список вещественных чисел после каждой тройки чисел вставить их среднеарифметическое значение. Если в конце списка осталось меньше трех чисел,
вставить среднеарифметическое значение из двух чисел или вставить последнее число.
есть вот такое решение, но этот код работает не совсем верно:
stroka = «»
a = []
z = int (input(«введите количество чисел»))
for i in range (z) :
m = int(input(«введите целое число»))
a.append(m)
print(a)
i = 0
while (i <= z) :
p = int(a[i])
b = 0
c = 0
if (i < z) :
if ((i+1) <= z) :
b = a[i+1]
if ((i+2) <= z) :
c = a[i+2]
a.insert(i+3, (p+b+c)/3)
else :
a.insert(i+2, (p+b) /2)
else:
a.insert((i+1), p*1.0)
else:
a.insert((i+2), p*1.0)
i = i+3
print(a)
Я решил 4 таким кодом.
l = [i + (i+1) + (i+2) for i in range(11)]
print(l)