Python Урок 4. Списки или массивы в Питоне

Поділитись

На уроке объясняется, как в языке python представлены списки (вместо массивов); объясняется про создание списков на Python.

Часть I: Коллекции: Списки / массивы

  • Cписки — это изменяемые последовательности в отличие от строк.
  • Представим строку как объект в памяти, в этом случае, когда над строкой выполняются операции конкатенации и повторения, то сама строка не меняется, но в результате выполнения операции в другом месте памяти создается другая строка.
    • В строку нельзя добавить новый символ или удалить существующий, не создав при этом новой строки.

Пример:
Так, например, в Питоне нельзя переприсваивать значение для отдельных символов строки.
Программа выдаст ошибку!

s=»aaa»;
s[1]=»b»;
print(s1)

Создание списков на Python

  • Так выглядит в коде Python пустой список:
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 создать список можно также при помощи генераторов, — это довольно-таки новый метод:
  • Первый простой способ.
# список из 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]

или такой пример:
 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)

ПРОСТЕЙШИЕ ОПЕРАЦИИ НАД СПИСКАМИ

  • Списки можно складывать (конкатенировать) с помощью знака «+»:
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]]

Как узнать длину списка?

В питоне не нужно явно указывать размер списка или вручную выделять на него память. Длину списка можно узнать с помощью встроенной функции 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 = » » )

Задание Python 4_7:
Необходимо задать список (массив) из шести элементов; заполнить его вводимыми значениями и вывести элементы на экран. Использовать два цикла: первый — для ввода элементов, второй — для вывода.

Замечание: Для вывода через «,» используйте следующий синтаксис:

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

Задание Python 4_8:
Заполните список случайными числами в диапазоне 20..100 и подсчитайте отдельно число чётных и нечётных элементов. Использовать цикл.

Замечаниеработа со случайными числами.Задание Python 4_9: Найдите минимальный элемент списка. Выведите элемент и его индекс. Список из 10 элементов инициализируйте случайными числами. Для перебора элементов списка использовать цикл.

Пример результата:

9 5 4 22 23 7 3 16 16 8 Минимальный элемент списка L[7]=3

Часть II: Другие операции над списками при помощи функций

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) #  — суммирование элементов
  • Функция join() — соединение элементов через  определенный символ:
lst=['11','22','33']
lst="-".join(lst)# '11-22-33'
  • Функция split([sep]) — возвращает список подстрок, получающихся разбиением строки a разделителем sep:
str="1-2-3-4"
s1=str.split("-") # ['1','2','3','4']
  1. минимальный и максимальный элементы списка;
  2. сумму и среднее арифметическое;
  3. второй минимальный элемент (второй по минимальности).
    1. Начало программы:
lst=[4,5,2,3,4]
  • Добавление элемента, append():
>>> a=[]
>>> a.append('444')
>>> a 
['444']
  • Добавление элемента, extend():
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']
  • Удаление элемента, remove():
> a.remove('444')
>>> a
[]
  • Удаление элемента по индексу, del:
>>> del a[0]
>>> a
[]

 При копировании списков, т.е. присваивании одного списка другому, изменение первого списка влечет за собой изменение второго списка. Так как эти объекты связаны одной областью памяти (ссылка на список).
mas1 =[1, 2, 3] 
mas2 = mas1 # создается ссылка на список  
mas1[0] = 4
print(mas2) #[4, 2, 3]

Чтобы создать не ссылку на список, а копию списка можно использовать либо срез либо функцию copy.
1!
mas2 = mas1[:] # используем срез
2!
import copy 
 mas1 =[1,2,3] 
 mas2 = copy.copy(mas1)
  • Пример палиндрома: казакABBA
  • Использовать функции.
  • Поскольку при присваивании одного списка другому, изменение первого ведет к аналогичному изменению второго списка, то необходимо использовать копию (copy).
    • Начало программы:
import copy 
stroka=input('введите слово')
lst=list (stroka) # конвертируем строку в список


 Ключевое слово «in»
 Проверить, содержит ли список некоторый объект, можно с помощью ключевого слова «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  ...

Для того, чтобы получить псевдослучайное целое число:

import random   random.randint(<начало>,<конец>)

Для того, чтобы получить псевдослучайное вещественное число:

import random  
random.uniform(<начало>,<конец>)

ЦИКЛ 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]


Поділитись