30 Список методов и поддерживаемых операторов

Начиная с данным списком a :

 a = [1, 2, 3, 4, 5]

 
  1. append(value) - добавляет новый элемент в конец списка.

     # Append values 6, 7, and 7 to the list
    a.append(6)
    a.append(7)
    a.append(7)
    # a: [1, 2, 3, 4, 5, 6, 7, 7]
    
    # Append another list
    b = [8, 9]
    a.append(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]
    
    # Append an element of a different type, as list elements do not need to have the same type
    my_string = "hello world"
    a.append(my_string)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9], "hello world"]
    
     

    Обратите внимание , что append() метод только добавляет один новый элемент в конец списка. Если вы добавляете список в другой список, добавляемый вами список становится единым элементом в конце первого списка.

     # Appending a list to another list
    a = [1, 2, 3, 4, 5, 6, 7, 7]
    b = [8, 9]
    a.append(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, [8, 9]]
    a[8]
    # Returns: [8,9] 
  2. extend(enumerable) - расширяет список путем добавления элементов из другого перечислим.

     a = [1, 2, 3, 4, 5, 6, 7, 7]
    b = [8, 9, 10]
    
    # Extend list by appending all elements from b
    a.extend(b)
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    
    # Extend list with elements from a non-list enumerable:
    a.extend(range(3))
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10, 0, 1, 2]
    
     

    Списки также могут быть объединены с + оператора. Обратите внимание, что это не изменяет ни один из исходных списков:

     a = [1, 2, 3, 4, 5, 6] + [7, 7] + b
    # a: [1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10] 
  3. index(value, [startIndex]) - получает индекс первого вхождения значения входного сигнала. Если входное значение не в таком перечне ValueError исключения. Если указан второй аргумент, поиск начинается с указанного индекса.

     a.index(7)
    # Returns: 6
    
    a.index(49) # ValueError, because 49 is not in a.
    
    a.index(7, 7)
    # Returns: 7
    
    a.index(7, 8) # ValueError, because there is no 7 starting at index 8 
  1. insert(index, value) - вставляет value непосредственно перед указанным index . Таким образом , после вставки нового элемента занимает позицию index .

     a.insert(0, 0)  # insert 0 at position 0
    a.insert(2, 5)  # insert 5 at position 2
    # a: [0, 1, 5, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10] 
  1. pop([index]) - Удаляет и возвращает элемент index . Без аргументов удаляет и возвращает последний элемент списка.

     a.pop(2)
    # Returns: 5
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 7, 8, 9, 10]
    a.pop(8)
    # Returns: 7
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    # With no argument:
    a.pop()
    # Returns: 10
    # a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
  2. remove(value) - удаляет первое вхождение заданного значения. Если прилагаемое значение не может быть найдено, ValueError поднимаются.

     a.remove(0)
    a.remove(9)
    # a: [1, 2, 3, 4, 5, 6, 7, 8]
    a.remove(10)
    # ValueError, because 10 is not in a 
  3. reverse() - изменяет список на месте и не возвращает None .

     a.reverse()
    # a: [8, 7, 6, 5, 4, 3, 2, 1]
    
     

    Есть также другие способы реверсирования списка .

  4. count(value) - подсчитывает количество вхождений некоторого значения в списке.

     a.count(7)
    # Returns: 2 
  5. sort() - сортирует список в числовом и лексикографическом порядке и возвращает None .

     a.sort()
    # a = [1, 2, 3, 4, 5, 6, 7, 8]
    # Sorts the list in numerical order
    
     

    Списки также могут быть отменены при сортировке с помощью reverse=True , флага в своем sort() методе.

     a.sort(reverse=True)
    # a = [8, 7, 6, 5, 4, 3, 2, 1]
    
     

    Если вы хотите сортировать по атрибутам элементов, вы можете использовать key ключевого слова аргумента:

     import datetime
    
    class Person(object):
        def __init__(self, name, birthday, height):
            self.name = name
            self.birthday = birthday
            self.height = height
    
        def __repr__(self):
            return self.name
    
    l = [Person("John Cena", datetime.date(1992, 9, 12), 175),
         Person("Chuck Norris", datetime.date(1990, 8, 28), 180),
         Person("Jon Skeet", datetime.date(1991, 7, 6), 185)]
    
    l.sort(key=lambda item: item.name)
    # l: [Chuck Norris, John Cena, Jon Skeet]
    
    l.sort(key=lambda item: item.birthday)
    # l: [Chuck Norris, Jon Skeet, John Cena]
    
    l.sort(key=lambda item: item.height)
    # l: [John Cena, Chuck Norris, Jon Skeet]
    
     

    В случае списка диктов концепция одинакова:

     import datetime
    
    l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'height': 175},
     {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'height': 180},
     {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'height': 185}]
    
    l.sort(key=lambda item: item['name'])
    # l: [Chuck Norris, John Cena, Jon Skeet]
    
    l.sort(key=lambda item: item['birthday'])
    # l: [Chuck Norris, Jon Skeet, John Cena]
    
    l.sort(key=lambda item: item['height'])
    # l: [John Cena, Chuck Norris, Jon Skeet]
    
     

    Сортировать по sub dict:

     import datetime
    
    l = [{'name':'John Cena', 'birthday': datetime.date(1992, 9, 12),'size': {'height': 175, 'weight': 100}},
     {'name': 'Chuck Norris', 'birthday': datetime.date(1990, 8, 28),'size' : {'height': 180, 'weight': 90}},
     {'name': 'Jon Skeet', 'birthday': datetime.date(1991, 7, 6), 'size': {'height': 185, 'weight': 110}}]
    
    l.sort(key=lambda item: item['size']['height'])
    # l: [John Cena, Chuck Norris, Jon Skeet] 

Лучший способ разобраться с помощью attrgetter и itemgetter

Списки также могут быть отсортированы с помощью attrgetter и itemgetter функции из модуля оператора. Это может помочь улучшить читаемость и возможность повторного использования. Вот несколько примеров,

 from operator import itemgetter,attrgetter

people = [{'name':'chandan','age':20,'salary':2000},
          {'name':'chetan','age':18,'salary':5000},
          {'name':'guru','age':30,'salary':3000}]
by_age = itemgetter('age')
by_salary = itemgetter('salary')

people.sort(key=by_age) #in-place sorting by age
people.sort(key=by_salary) #in-place sorting by salary

 

itemgetter также может быть дан индекс. Это полезно, если вы хотите сортировать на основе индексов кортежа.

 list_of_tuples = [(1,2), (3,4), (5,0)]
list_of_tuples.sort(key=itemgetter(1))
print(list_of_tuples) #[(5, 0), (1, 2), (3, 4)]

 

Используйте attrgetter , если вы хотите сортировать по атрибутам объекта,

 persons = [Person("John Cena", datetime.date(1992, 9, 12), 175),
           Person("Chuck Norris", datetime.date(1990, 8, 28), 180),
           Person("Jon Skeet", datetime.date(1991, 7, 6), 185)] #reusing Person class from above example

person.sort(key=attrgetter('name')) #sort by name
by_birthday = attrgetter('birthday')
person.sort(key=by_birthday) #sort by birthday









 
  1. clear() - удаляет все элементы из списка

     a.clear()
    # a = [] 
  2. Репликация - умножая существующий список на целое число будет производить больший список , состоящий из того, что многие копии оригинала. Это может быть полезно, например, для инициализации списка:

     b = ["blah"] * 3
    # b = ["blah", "blah", "blah"]
    b = [1, 3, 5] * 5
    # [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
    
     

    Позаботьтесь делать это , если список содержит ссылки на объекты (например , список списков), см Общие Ловушки - Список умножения и общие ссылки .

  3. Удаление элемента - можно удалить несколько элементов в списке , используя del ключевые слова и ломтик обозначение:

     a = list(range(10))
    del a[::2]
    # a = [1, 3, 5, 7, 9]
    del a[-1]
    # a = [1, 3, 5, 7]
    del a[:]
    # a = [] 
  4. копирование

    Назначение по умолчанию "=" назначает ссылку на исходный список новому имени. Таким образом, исходное имя и новое имя указывают на один и тот же объект списка. Изменения, сделанные с помощью одного из них, будут отражены в другом Это часто не то, что вы хотели.

     b = a
    a.append(6)
    # b: [1, 2, 3, 4, 5, 6]
    
     

    Если вы хотите создать копию списка, у вас есть варианты ниже.

    Вы можете нарезать это:

     new_list = old_list[:]
    
     

    Вы можете использовать встроенную функцию list ():

     new_list = list(old_list)
    
     

    Вы можете использовать универсальный copy.copy ():

     import copy
    new_list = copy.copy(old_list) #inserts references to the objects found in the original.
    
     

    Это немного медленнее, чем list (), потому что он должен сначала выяснить тип данных old_list.

    Если список содержит объекты, и вы также хотите скопировать их, используйте generic copy.deepcopy ():

     import copy
    new_list = copy.deepcopy(old_list) #inserts copies of the objects found in the original.
    
     

    Очевидно, самый медленный и самый требующий памяти метод, но иногда неизбежный.

copy() - возвращает неполную копию списка

     aa = a.copy()
    # aa = [1, 2, 3, 4, 5]