ГЛАВНАЯ      ДОКУМЕНТАЦИЯ      СТАТЬИ      ПРОГРАММЫ      ССЫЛКИ      ФОРУМ      ДРУГОЕ   

Использование списковых включений

        Списковые включения - это мощное средство языка Python, которое появилось начиная с версии 2.0. С помощью списковых включений можно создавать списки из одной или нескольких последовательностей, в соответствии с установленными условиями. Синтаксис их таков:
[expression for expression1 in sequence1
            for expression2 in sequence2
            ...
            if condition
            if condition
            ...]
        Все команды for ... in выполняются итеративно слева направо. Фразы if ... необязательны, но при их указании можно ограничить кол-во элементов в создаваемом списке. Приведу несколько примеров. Предполжим Вам необходимо ко всем элементам списка прибавить 5. Вместо использования цикла for:
a = [1,2,3,4,5,6,7,8,9,10] 
for i in range(len(a)): 
    a[i]+=5
        Упростите код с помощью списковых включений:
a = [1,2,3,4,5,6,7,8,9,10]
a = [x+5 for x in a]
        При использовании списковых включений код стал более коротким и быстрым. Вот как заполнить список квадратами чисел от 0 до 10 и квадратами только чётных чисел:
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x**2 for x in range(10) if x%2==0]
[0, 4, 16, 36, 64]
        При работе с файлами:
myfile = file('testfile.txt', 'r')
[c for line in myfile for c in line]
myfile.close()
        Примеры обработки нескольких последовательностей:
>>> [(x,y) for x in range(3) for y in range(2)]
[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]
>>> [(x,y) for x in range(3) for y in range(2) if x>0]
[(1, 0), (1, 1), (2, 0), (2, 1)]
>>> [(x,y) for x in range(3) for y in range(2) if x>0 if y<1]
[(1, 0), (2, 0)]
>>> [x+y for x in range(3) for y in range(6)]
[0, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 6, 2, 3, 4, 5, 6, 7]
>>> [(x,y) for x in 'abc' for y in range(2)]
[('a', 0), ('a', 1), ('b', 0), ('b', 1), ('c', 0), ('c', 1)]
        Кроме того разработчики Python рекомендуют использовать списковые включения вместо функций map и filter, т.к. это более мощное и обычно более быстрое средство. Приведу пару примеров замены map и filter на списковые включения.
>>> a = [1, 4, 3, 5, 2]
>>> map(lambda x: x**3-3, a)
[-2, 61, 24, 122, 5]
>>> [x**3-3 for x in a]
[-2, 61, 24, 122, 5]
>>> b = [-3, -2, -1, 0, 1, 2, 3]
>>> filter(lambda x: x>0, b)
[1, 2, 3]
>>> [x for x in b if x>0]
[1, 2, 3]
        Списковые включения - очень мощное и удобное средство, способное упростить и убыстрить некоторые конструкции в Вашей программе.

Источники:
        purepython.narod.ru

автор: Г.Дряпак   
ПОМОЩЬ САЙТУ :
sms.Є®ЇЁ«Є  *PythonUA*
Для чего Вы используете Python?
Admin( 46 )
Web( 61 )
GUI( 37 )
Embedding ( 16 )
Другое( 34 )
Какими продуктами Вы пользовались?
Zope( 15 )
Plone( 1 )
TG( 7 )
Django( 15 )
Twisted( 5 )
Другими( 10 )
ДРУЗЬЯ:
LUG.DN.UA
D-FENS.ORG.UA
SLAV0NIC.XSS.RU
CETUS.COM.UA
ENTDEV.ORG
[Python Powered]
Rambler's Top100
Copyright © 2006 python.com.ua