Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
General The null object: None Tuple (): immutable and for heterogeneous data List []: mutable and for homogeneous data Dict {}: associative array, e.g., {'one':1, 'two':2} Non-‐keyworded var-‐length arg list: *args Keyworded var-‐length arg list: **kwargs Swapping: a,b=b,a zip([1,2,3],['a','b','c']) returns the list of tuples [(1, 'a'),(2,'b'),(3,'c')] Different ways of looping through a list L: for index in range(len(L)): for item in L: for index, item in enumerate(L): it = iter(L) it.next() # raises exception if no more elements Looping through multiple lists: for x,y in zip(lst1,lst2) for x,y in map(None,lst1,lst2) Retrieving values from a dict: map(somedict.get, keys) or [somedict[key] for key in keys] Creating a list of lists: [[0 for col in range(nCols)] \ for row in range(nRols)] note that the following duplicates references to the first col: [[0]*nCols]*nRows # DO NOT use Cloning a list which may contain sub-‐lists: copy.deepcopy Adding item to dictionary value that is a list: somedict.setdefault(key,[]).append(val) Reduction is underused and powerful, e.g., the multiplication equivalent of sum: import operator reduce(operator.mul, [1,2,3,4]) Exception handling try: if len(args) == 0: raise Exception('No args') except Exception as exc: print exc.message else: ... finally: ... Data conversion Byte list → string: array('B', lst).tostring() String → byte list: array('B', s).tolist() Text processing Unicode string: u"Hello World" Multi-‐line strings: "line 1\ line2" """line1 line2""" Joining strings: '\n'.join(listoflines) Process characters: map(func, s) Check if string contains any character from some set: from functools import reduce from operator import and_, or_ reduce(or_, map(s.__contains__, someset)) Alignment: ljust, rjust, center, e.g. 'Hello world'.ljust(width) Outputting Unicode strings: sys.stdout=codecs.lookup('utf-8')[-1](sys.stdout) print(s) Regular expression x* matches 0 or more repetitions of x x+ matches 1 or more repetitions of x x? matches 0 or 1 appearance of x *?, +?, ?? make the qualifiers non-‐greedy ^ matches the start of a string x{m} matches m copies of x x{m,n} matches m to n copies of x x{m,n}? matches the least number of copies of x Lookahead assertion: (?=x) matches if x matches next (?!x) matches if x does not match next Lookbehind assertion: (?<=x) matches if x matches previously (?<!x) matches if x does not match previously Searching and sorting Python used to use a hybrid of samplesort (a quicksort variant) for big lists and binary insertion sort for small lists; it now uses timsort Decorate-‐sort-‐undecorate: # sort by surname, then orglst = ['Peter Pan', 'Peter Parker'] auxlst = map(lambda x: (x.split()[-1], x), orglst) auxlst.sort() # sort a list of tuples orglst = map(lambda x: x[-1], auxlst) To reverse-‐sort strings, reverse the strings first (Python 2.x): import string allchars = string.maketrans('','') revlst = list(allchars) revlst.reverse() revchars = ''.join(revlst) revs = 'abcdef'.translate(string.maketrans(\ allchars, revchars)) Priority queue: import bisect q = [] # list of tuples of task ID and priority tasks = [('Task 1',1), ('Task 2',3), ('Task 3',2)] for t in tasks: bisect.insort(q, (t[1], t[0])) Itertools module Iterators: count, cycle, repeat Object-‐oriented programming class SomeClass: def __init__(self): self.data = init_data def SomeFunc(self, d): self.data = d Check/get for attribute: hasattr(o,attr), getattr(o,attr) Files Writing to file: print >> file, sometext file.write(sometext) Networking TCP server: from socket import * sin = socket(AF_INET, SOCK_STREAM) sin.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) sin.bind(('localhost',someport)) sin.listen(1) try: while 1: sconn, addr = sin.accept() while 1: recvdata = sconn.recv(1024) if not recvdata: break sconn.close() finally: sin.close() Threads, processes and synchronization Extending and embedding References David Ascher, Anna Martelli Ravenscroft, and Alex Martelli, “Python Cookbook,” 2nd ed., O'Reilly Media, 2005.