Учебник 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 используется только один раз.