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
Advanced Python Idioms BCHB524 2014 Lecture 9 9/29/2014 BCHB524 - 2014 - Edwards Outline Sequences, iteration, and iterables Comprehensions Functional Programming Exercises 9/29/2014 BCHB524 - 2014 - Edwards 2 Sequences and Iterables Anything that supports: Iterables we know about: Strings, lists, sets, tuples Dictionaries (keys(), values(), items()) Files (line by line) Iterable → list, Iterable → set, etc. Pair iterable → dictionary! 9/29/2014 BCHB524 - 2014 - Edwards 3 Iterables # sequences are iterable -> build list aList = list('abcdefabcdef') print "String abcdefabcdef as a list:\n ",aList # sequences are iterable -> build set (no duplicates) aSet = set('abcdefabcdef') print "String abcdefabcdef as a set:\n ",aSet # Two iterables can be paired up using the zip function keys = [1,2,3,4,5] values = 'abcde' aListOfPairs = zip(keys,values) print "A list of pairs:\n ",aListOfPairs # list of pairs are iterable -> build dict aDict = dict(aListOfPairs) print "A dictionary from a list of pairs\n 9/29/2014 BCHB524 - 2014 - Edwards ",aDict 4 Special Iterable Functions zip enumerate single value from many map, filter iterates over (index of item, item) sum, max, min, all, any merges two or more iterables Applies function or test to each element sorted, reversed 9/29/2014 provides the items in sorted or reversed order BCHB524 - 2014 - Edwards 5 Enumerate # sequences are iterable -> build list aList = list('abcdefabcdef') # enumerate get index with item for i,c in enumerate(aList): print i,c # exactly equivalent to i = 0 for c in aList: print i,c i += 1 9/29/2014 BCHB524 - 2014 - Edwards 6 Map # Numbers in a string... split into a list numbers = '1,2,3,4,5,6' number_list = numbers.split(',') # Print the list, and manipulate its values! print number_list number_list[0] += 1 # Fix the problem, apply the int function to each item number_list = map(int,number_list) # Print the new list and check we can manipulate its values... print number_list number_list[0] += 1 print number_list # Now to print it back out print ",".join(number_list) # Fix the problem, apply the str function to each item number_list = map(str,number_list) # Print the new list and check that we can do a join print number_list print ",".join(number_list) 9/29/2014 BCHB524 - 2014 - Edwards 7 Sorted, Reversed # Make a list aList = list('abcdefabcdef') print "aList:\n ",aList # print the list sorted and reversed... print "Sorted:\n ",sorted(aList) print "Reversed:\n ",reversed(aList) print "Reversed in list:\n ",list(reversed(aList)) 9/29/2014 BCHB524 - 2014 - Edwards 8 Comprehensions Comprehensions build lists using iteration [ expr for item in iterable ] # Make the times two table.. timesTwo = [ 2*x for x in range(10) ] # Make it another way timesTwoToo = [] for x in range(10): timesTwoToo.append(2*x) print "timesTwo:\n ",timesTwo print "timesTwoToo:\n ",timesTwoToo 9/29/2014 BCHB524 - 2014 - Edwards 9 Functional Programming Python lets us treat functions as a basic immutable data-type. def f(x): return 2*x g = f print f(1),g(2),f(3),g(4) We can’t change them after they are defined, but we can pass them in to functions. 9/29/2014 BCHB524 - 2014 - Edwards 10 sorted, revisited The sorted function permits a keyword parameter: key key is a function which returns the sort value # Initialize a new list aList = [1,-2,3,-4,5,-6] # Print the list as is and sorted print "aList:\n ",aList print "Sorted:\n ",sorted(aList) # Define absolute value sort key def absSortKey(x): return abs(x) # Define negative value sort key def negSortKey(x): return -x # Demonstrate alternative sorting keys print "Sorted by absolute value:\n ",sorted(aList,key=absSortKey) print "Sorted by negative value:\n ",sorted(aList,key=negSortKey) 9/29/2014 BCHB524 - 2014 - Edwards 11 Lambda functions Sometimes, the functions are so simple, we don’t want to define them formally. Usually used with sorted… Useful key functions: Case insensitive: sorted(words,key=lambda s: s.lower()) By dictionary value: sorted(dict.items(),key=lambda p: p[1]) Also useful for map: map(lambda x: 2*x, (1,2,3,4,5,6)) 9/29/2014 BCHB524 - 2014 - Edwards 12 Exercises Write a reverse complement function (and package it up as a program) as compactly as possible, using the techniques introduced today. 1. Hint: Use a dictionary for complement, map to apply the get method, reversed, and join. Write a program to compute and output the frequency of each nucleotide in a DNA sequence using a dictionary (see lec. 8). 2. 9/29/2014 Output the frequencies in most-occurrences to leastoccurrences order. BCHB524 - 2014 - Edwards 13