Учебник Python/Типы данных

Материал из Викиучебника — открытых книг для открытого мира
Перейти к навигации Перейти к поиску
Учебник Python


редактировать содержание

https://docs.google.com/document/d/1jvUoLezDe2wdsgYSJULR_oACjqcYbfqYFMhBHBHrmG4/pub

int[править]

divmod(6,4) # возвращает tuple. первый элемент - целая часть частного, второй - остаток от деления
>>> (1,2)
преобразовать битовую маску в число
int('0101010101', 2)
получить шестнадцатеричное представление числа
hex(45464879498).rstrip("L")[2:]

dict[править]

прибавить к одному словарю другой — b.update(c) В качестве ключей словаря нельзя использовать unhashable объекты. Сам dict является unhashable объектом. list/tuple в dict + интересное обсуждение, как перенумеровать объекты

dict можно копировать:

myDict.copy()

get

оч. полезная функция:

a = myDict.get( "key", "defaulValue" ) ## a = myDict["key"] if "key" in myDict esle "defaultValue"

has_key

метод has_key проверяет, существует ли ключ у словаря. Вместо него лучше (быстрее) использовать проверку:

if dictKey in self.dictObj:
    pass

сравнение произовдительности:

from datetime import datetime

args = {"guiHi": 0}
a = datetime.now()
for i in xrange(1000000):
    if args.has_key("guiHi"):
        pass

b = datetime.now()
for i in xrange(1000000):
    if "guiHi" in args:
        pass

c = datetime.now()
print b-a
print c-b
>>>
0:00:00.391000
0:00:00.234000

обход по словарю[править]

  • по ключам: keys(), iterkeys()
  • по значениям: values(), itervalues()
  • по парам (ключ, значение): items(), iteritems()


list[править]

определить позицию элемента в списке

list.index( "11" )

сортировка

aa = [2,44,2,3,5]
aa.sort() # сортировка по возрастанию
print aa
aa.reverse() # изменить порядок на противоположный
print aa
>>> [2, 2, 3, 5, 44]
>>> [44, 5, 3, 2, 2]

сортировка списка объектов:

class a(object):
    def __init__(self, priority):
        self.priority = priority
    def __repr__(self):
        return str(self.priority)
m = [a(3), a(6), a(1), a(0), a(7)]
m.sort(lambda x,y: x.priority-y.priority) ## тут lambda должна возвращать положительное или отрицательное число
    ## если нужно более сложное сравнение, то делаем
m.sort(lambda x,y: -1 if x.priority-y.priority else 1)
print m

Генерация списков, списковые выражения[править]

Часто для заполнения списка возникает желание использовать функцию append и это бывает зло. вместо этого надо использовать генерацию списков с помощью «списковых выражений»

m = [2*x for x in range(10) if x*2> 10]

стоит обратить внимание, что это выражение является списком, а выражение:

(x for x in (10,11,12) )

является генератором. Причём, если генератор зависит от списка g:

a = (x for x in g)

то при изменении списка g меняется и генератор. Такой генератор a используется только один раз.