list

list

class list(iter_object)

Список

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

a[0]
# 1

a[0:5:2]
#[1, 3]
s = []
append(obj)

Добавляет новый объект в список

s.append('3')
# s = [1, 2, '3']
count(obj)

Возвращает int, количество вхождений искомого объекта в списке

s.count(1)
# 1
extend(iter_obj)

Добавляет итерируемый объект в конец списка

s.extend('qw')
# s = [1, 2, 'q', 'w']
index(obj[, start_pos, end_pos])

Возвращает int, индекс позиции искомого элемента в списке

s.index(1)
# 0
insert(index, obj)

Вставляет в список объект по указаннной позиции

s.insert(2, 3)
# s = [1, 2, 3]
pop([index])

Возвращает объект, по указанной позиции из списка, удалив объект из списка

s.pop(1)
# 2
# s = [1]
remove(obj)

Удаляет из списка первый встреченный экземпляр аргумента

p.remove(1)
# p = [2]
reverse()

Изменяет порядок следования элементов в списке на противоположный

p.reverse()
# p = [2, 1]
sort([key=None, reverse=False])

Сортирует список в порядке возрастания

  • key - функция, которая сортирует список
a = [5, 3, 8, 6, 1, 2, 0]
a.sort()
# a = [0, 1, 2, 3, 5, 6, 8]

Генераторы списка

Генератор списка сначала фильтруют, а потом возвращают результат.

[element for variable(s) in list if condition]

  • list — любой итерируемый элемент
  • variable(s) — переменная или переменные, которые приравниваются к текущему элементу списка, аналогично циклу for
  • condition — инлайновое выражение: если оно равно true, элемент добавляется в результат
  • element — инлайновое выражение, результат которого используется как элемент списка-результата
[i for i in [1,2,3,4,5,6] if i > 3]
#[4, 5, 6]

arr = [[1, 2], [3, 4], [5, 6]]
[j * 10 for i in arr for j in i if j % 2 == 0]
# [20, 40, 60]

Генераторы очень быстрые по скорости работы. Допустим, надо возвести в квадрат все элементы списка.

import timeit
a = """
    squares = []
    for number in range(20):
        if number < 10:
            squares.append(number*number)
    """
timeit.repeat(a)
# [1.3735721111297607, 1.3705899715423584, 1.3692619800567627]

a = """
    squares = [number*number for number in range(20) if number < 10]
    """
timeit.repeat(a)
# [1.0607497692108154, 1.050074815750122, 1.0547380447387695]

a = """
    squares = []
    for number in range(10):
        squares.append(number*number)
    """
timeit.repeat(a)
# [1.0115618705749512, 1.0128450393676758, 1.0099198818206787]

a = """
    squares = [number*number for number in range(10)]
    """
timeit.repeat(a)
# [0.6439402103424072, 0.6230731010437012, 0.6240830421447754]

Выражения-генераторы

Существует обратная сторона генератора списков: весь список должен находиться в памяти. Это не проблема для маленьких списков, как в предыдущих примерах, и даже на несколько порядков больше.

Но в конце концов это становится неэффективным.

Отличие их от генераторов списков состоит в том, что они не загружают в память список целиком, а создают ‘generator object’, и в каждый момент загружен только один элемент списка.

Выражения-генераторы имеют такой же синтаксис, как генераторы списков, но вместо квадратных скобок используются круглые:

numbers = (1, 2, 3, 4, 5)
squares_under_10 = (number for number in numbers if number < 4)
# squares_under_10 = <generator object <genexpr> at 0x175e7d0>
for square in squares_under_10:
        print square,
# 1 2 3