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

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

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

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

    L - список целых чисел:
    L = [25, 755, -40, 57, -41]
    
    В языке Python отсутствует такая структура, как «массив». Для работы с массивами используются списки.

    Списки являются упорядоченными последовательностями, которые состоят из различных объектов (значений, данных), заключающихся в квадратные скобки [ ] и отделяющиеся друг от друга с помощью запятой.

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

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

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

    Изменять строку можно только, работая с ней, как с объектом (метод replace, например):

    s1="breKeKeKeKs"; 
    s1=s1.replace('Ke','XoXo',2) 
    s1 # breXoXoXoXoKeKs

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

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

    Создать список можно несколькими способами. Рассмотрим их.

    1. Получение списка через присваивание конкретных значений

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

    # список из 10 элементов, заполненный единицами
    l = [1]*10
    # список l = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  • Пример 2:
  • l = [i for i in range(10)]
    # список l = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • Пример 3:
  • l = [i*2 for i in range(10)]
    # список l = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  • Пример 4 -> добавим условие для выбора только четных чисел из примера 3:
  • 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)
    Задание Python 4_1:
    Создайте список целых чисел от -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]
    
    Задание Python 4_2:
    Создайте список целых чисел от -10 до 10 с шагом 2 (генерация list).

    Результат:

    [-10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10]
    Задание Python 4_3:
    Создайте список из 20 пятерок (генерация).

    Результат:

    [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]
    Задание Python 4_4:
    Создайте список из сумм троек чисел от 0 до 10, используя генератор списка (0 + 1 + 2, 1 + 2 + 3, …).

    Результат:

    [3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33]
    Задание Python 4_5 (сложное):
    Заполните массив элементами арифметической прогрессии. Её первый элемент, разность и количество элементов нужно ввести с клавиатуры.
      
    * Формула для получения 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]

    Можно!

    Задание 4_6:
    В строке записана сумма натуральных чисел: ‘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 = " " )
Задание 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']
    Задание 4_10:
    Дан список из 5 различных элементов. Используя функции (не использовать цикл), необходимо найти и вывести:

    • минимальный и максимальный элементы списка;
    • сумму и среднее арифметическое;
    • второй минимальный элемент (второй по минимальности).

    Начало программы:

    lst=[4,5,2,3,4]


    Добавление и удаление элементов списка

    • Добавление элемента, append():
    • >>> 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]
    • Добавление элемента, 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=['asd','444','555','77']
      a.remove('444') # ['asd', '555', '77']
    • Удаление элемента по индексу, del:
    • 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.

    1. mas2 = mas1[:] # используем срез
    2. import copy 
      mas1 =[1,2,3] 
      mas2 = copy.copy(mas1)
    Задание 4_11: Проверить, является ли заданное слово палиндромом.

    Примечание:

    • Пример палиндрома: казак, 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  ...

    Чтобы получить случайное число между 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)]
    Задание Python 4_12:
    Найдите в массиве все простые числа и скопируйте их в новый массив.
    Задание Python 4_13:
    Решить задачу поиска среднего значения в списке из 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()
    Задание Python 4_14: Определить индексы элементов массива (списка), значения которых принадлежат заданному диапазону (т.е. не меньше заданного минимума и не больше заданного максимума)
    задание со списком в Питоне

    * в результате получили индексы элементов, значения которых находятся в диапазоне [5,15]

    Алгоритм:

    1. Заполнить список (массив) случайными числами
    2. Запросить для ввода минимум и максимум диапазона
    3. Найти индексы элементов, значения которых входят в диапазон. Добавлять найденные индексы к новому списку
    4. Вывести общее число найденных индексов (функция len()) и отдельно все индексы
    Задание Python 4_15: Дополнить предыдущую программу следующим:

    После того, как элемент с подходящим значением добавлен в новый список – удалять его из исходного списка

    * Использовать цикл while , функцию len()

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

    1. Тоже не понял, как сделать по-простому, сделал » в лоб» 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)

  1. Держите мое извращение по четвертому заданию ребзя х)

    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

  2. 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)

    1. for n in (range(1,int(input(«введите границу»)))): print((n-1)+(n)+(n+1))
      Или так если любите по короче

  3. for n in (range(1,int(input(«введите границу»)))): print((n-1)+(n)+(n+1))
    answer4_4

  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)

  5. Я решил 4 таким кодом.

    l = [i + (i+1) + (i+2) for i in range(11)]
    print(l)

Обсуждение закрыто.