Перейти к содержанию

Python работа со списком

Важно

Методы списков меняют содержимое списка на месте

Определение списка

В квадратных скобках [] идет перечисление элементов list1 = [элемент1, элемент2, элемент3]

    #п.э. конструкция типа вернет пустышку "none"
    In [434]: fdb1 = [0,10,30,40,20,40]
    In [435]: fdb1 = fdb1.sort()
    In [437]: fdb1
        " "

Работа со списком

Так же как со строками есть диапазоны, срезы шаги

In [243]: list1 = [100, 200, 300,400, 500, 600, 700]

In [244]: list1
Out[244]: [100, 200, 300, 400, 500, 600, 700]

In [245]: list1[0]
Out[245]: 100

In [246]: list1[-1]
Out[246]: 700

In [247]: list1[1:5]
Out[247]: [200, 300, 400, 500]

In [248]: list1[:5]
Out[248]: [100, 200, 300, 400, 500]

In [249]: list1[:-1]
Out[249]: [100, 200, 300, 400, 500, 600]

In [250]: list1[::2]
Out[250]: [100, 300, 500, 700]

In [251]: list1[::-1]
Out[251]: [700, 600, 500, 400, 300, 200, 100]

Список списков

In [256]: mac_address_table = [['Gi2/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1'],
     ...:   ['Gi2/2', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2'],
     ...:  ['Gi2/3', '001a.4a16.010c', 'dynamic ip', 'GigabitEthernet2/3']]

In [257]: mac_address_table
Out[257]:
[['Gi2/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1'],
 ['Gi2/2', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2'],
 ['Gi2/3', '001a.4a16.010c', 'dynamic ip', 'GigabitEthernet2/3']]

#Тогда аналогично работы с одиночны списком получаем
In [275]: mac_address_table[0]
Out[275]: ['Gi2/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1']

In [276]: mac_address_table[1]
Out[276]: ['Gi2/2', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2']

In [277]: mac_address_table[0][1:2]
Out[277]: ['0000.5e00.0101']

In [278]: mac_address_table[0][0:2]
Out[278]: ['Gi2/1', '0000.5e00.0101']

#Обратное отображение элемнтов двойного списка
In [280]: mac_address_table[0][::-1]
Out[280]: ['GigabitEthernet2/1', 'dynamic ip', '0000.5e00.0101', 'Gi2/1']

Именения значений списка и присвоение списка

#Меняем значение элдемнета в списке
In [299]: mac_address_table[0][0]='Gi2/1/1'

In [300]: mac_address_table
Out[300]:
[['Gi2/1/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1'],
 ['Gi2/2', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2'],
 ['Gi2/3', '001a.4a16.010c', 'dynamic ip', 'GigabitEthernet2/3']]

# Присваиваем список другому списку
In [301]: fdb1 = mac_address_table

# id при этом у них одинаковое
# Это значит, что по сути данные списки указываю 
# на одну и ту же область памяти
In [302]: id(mac_address_table)
Out[302]: 140236437906248

In [303]: id(fdb1)
Out[303]: 140236437906248

In [304]: fdb1
Out[304]:
[['Gi2/1/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1'],
 ['Gi2/2', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2'],
 ['Gi2/3', '001a.4a16.010c', 'dynamic ip', 'GigabitEthernet2/3']]

# При изменение значения в одном таком списке следует, что и спорой список 
# поменяет значение, т.к. это одна и та же обласить памяти
In [305]: mac_address_table[1][0]='Gi2/2/1'

In [306]: fdb1
Out[306]:
[['Gi2/1/1', '0000.5e00.0101', 'dynamic ip', 'GigabitEthernet2/1'],
 ['Gi2/2/1', '001a.4a16.010b', 'dynamic ip', 'GigabitEthernet2/2'],
 ['Gi2/3', '001a.4a16.010c', 'dynamic ip', 'GigabitEthernet2/3']]

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

# Создадим список
In [340]: fdb1= [1,2,3]
# Присвоим его другому списку
In [341]: fdb2 = fdb1

In [343]: fdb1
Out[343]: [1, 2, 3]

In [344]: fdb2
Out[344]: [1, 2, 3]


# Чтобы сделать новую копию независимую от существующей
# надо использовать copy(), тогда выделяется новая область памяти, 
# куда копируются значения списка
In [342]: fdb3 = fdb1.copy()

In [345]: fdb3
Out[345]: [1, 2, 3]

# Из вывода видно, что fdb1 и fdb2 ссылаются 
# на одну и ту же область памяти
# а fdb3 на другую

In [346]: id(fdb1)
Out[346]: 140236437784520

In [347]: id(fdb2)
Out[347]: 140236437784520

In [348]: id(fdb3)
Out[348]: 140236438565128

# соответственно при изменении данных в fdb1
In [349]: fdb1[0] = 10

In [350]: fdb1
Out[350]: [10, 2, 3]

# данные в fdb2 меняются
In [351]: fdb2
Out[351]: [10, 2, 3]

# А в fdb3 остаются прежними
In [352]: fdb3
Out[352]: [1, 2, 3]

Методы работы со списком

Добавление элемента в конец списка - append

In [359]: fdb1
Out[359]: [10, 2, 3]

In [366]: fdb1.append(4)

In [367]: fdb1
Out[367]: [1, 2, 3, 4]

Очистить список - clear

In [371]: fdb1.clear()

In [372]: fdb1
Out[372]: []

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

In [380]: fdb1.insert(2,250)

In [381]: fdb1
Out[381]: [100, 200, 250, 300]

Добавление несколько элементов в конец списка - extend

# !Особенность заключается в том, что extend добавляет именно список!
In [385]: fdb1.extend([400,500])

In [386]: fdb1
Out[386]: [100, 200, 250, 300, 400, 500]

Варианты объединения списков

In [387]: fdb1 =[10,20,30]
In [388]: fdb2 =[100,200,300]

#Можно сложить
In [389]: fdb1+fdb2
Out[389]: [10, 20, 30, 100, 200, 300]

# extend сразу же добавит в список 
In [390]: fdb1.extend(fdb2)

In [391]: fdb1
Out[391]: [10, 20, 30, 100, 200, 300]

# Можно просто объединить списки в один из существующих
In [392]: fdb1 =[10,20,30]

In [393]: fdb2 =[100,200,300]

In [394]: fdb1 = fdb1+fdb2

In [395]: fdb1
Out[395]: [10, 20, 30, 100, 200, 300]

Удаление элементов списка - pop

In [395]: fdb1
Out[395]: [10, 20, 30, 100, 200, 300]

# Удаляет последний элемент списка
In [396]: fdb1.pop()
Out[396]: 300

In [397]: fdb1
Out[397]: [10, 20, 30, 100, 200]


In [400]: fdb1
Out[400]: [10, 20, 30, 100, 200]

# Удаление первого элемента списка
In [401]: fdb1.pop(1)
Out[401]: 20

In [402]: fdb1
Out[402]: [10, 30, 100, 200]

# Удаление нулевого элемента списка
In [403]: fdb1.pop(0)
Out[403]: 10

In [404]: fdb1
Out[404]: [30, 100, 200]

Удаление элементов списка по значению - remove()

In [422]: fdb1 = [0,10,20,30,40,20]

# Удаляет оди первый по счету элемент списка со значением 20
In [423]: fdb1.remove(20)

In [424]: fdb1
Out[424]: [0, 10, 30, 40, 20]]

Сортировка списка - sort()

Работает только со списком

In [424]: fdb1
Out[424]: [0, 10, 30, 40, 20]

In [425]: fdb1.sort()

In [426]: fdb1
Out[426]: [0, 10, 20, 30, 40]

Сортировка - sorted() - работает для любых элеменитов, возвращает список

In [427]: fdb1 = [0,10,30,40,20,40]

# Сортирует список
In [428]: sorted(fdb1)
Out[428]: [0, 10, 20, 30, 40, 40]

In [429]: fdb1
Out[429]: [0, 10, 30, 40, 20, 40]

In [430]: fdb1 = sorted(fdb1)

In [431]: fdb1
Out[431]: [0, 10, 20, 30, 40, 40]

# Сортирует строку
In [433]: sorted('test 1')
Out[433]: [' ', '1', 'e', 's', 't', 't']

Переобразование через разделители строки в спискок и обратно split/join

In [438]: str1 = '1,2,3,4,5'

# преобразуем строку разделенную запятой в список
In [440]: str1.split(',')
Out[440]: ['1', '2', '3', '4', '5']

In [441]: list1 = str1.split(',')

# Преобразуем список в строку, где элементы списка разделены 

In [442]: list1
Out[442]: ['1', '2', '3', '4', '5']

# запятой
In [444]: ','.join(list1)
Out[444]: '1,2,3,4,5'

In [447]: sep=','

In [448]: sep.join(list1)
Out[448]: '1,2,3,4,5'

# ничем
In [445]: ''.join(list1)
Out[445]: '12345'

# пробелом
In [446]: ' '.join(list1)
Out[446]: '1 2 3 4 5'

Последнее обновление: 2023-05-29