From 845a38df3ab3023a964217f0666b1478c1bcac4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bertrand=20N=C3=A9ron?= <bneron@pasteur.fr> Date: Mon, 14 Jul 2014 05:10:12 +0200 Subject: [PATCH] add solutions to exercises --- source/Collection_Data_Types.rst | 113 +++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/source/Collection_Data_Types.rst b/source/Collection_Data_Types.rst index cb81858..833b152 100644 --- a/source/Collection_Data_Types.rst +++ b/source/Collection_Data_Types.rst @@ -1,5 +1,118 @@ +.. sectnum:: + :start: 4 + + .. _Collection_Data_types: ********************* Collection Data Types ********************* + +Exercices +========= + +exercice +-------- + +From a list return a new list without any duplicate, regardless of the order of items. +For example: :: + + >>> l = [5,2,3,2,2,3,5,1] + >>> uniqify(l) + >>> [1,2,3,5] #is one of the solutions + +solution :: + + >>> list(set(l)) + + +exercice +-------- +From a list return a new list without any duplicate, but keeping the order of items. +For example: :: + + >>> l = [5,2,3,2,2,3,5,1] + >>> uniqify_with_order(l) + >>> [5,2,3,1] + +solution :: + + >>> uniq = [] + >>> for item in l: + >>> if item not in uniq: + >>> uniq.append(item) + +solution :: + + >>> uniq_items = set() + >>> l_uniq = [x for x in l if x not in uniq_items and not uniq_items.add(x)] + +exercice +-------- + +list and count occurences of every 3mers in the following sequence :: + + s = """gtcagaccttcctcctcagaagctcacagaaaaacacgctttctgaaagattccacactcaatgccaaaatataccacag + gaaaattttgcaaggctcacggatttccagtgcaccactggctaaccaagtaggagcacctcttctactgccatgaaagg + aaaccttcaaaccctaccactgagccattaactaccatcctgtttaagatctgaaaaacatgaagactgtattgctcctg + atttgtcttctaggatctgctttcaccactccaaccgatccattgaactaccaatttggggcccatggacagaaaactgc + agagaagcataaatatactcattctgaaatgccagaggaagagaacacagggtttgtaaacaaaggtgatgtgctgtctg + gccacaggaccataaaagcagaggtaccggtactggatacacagaaggatgagccctgggcttccagaagacaaggacaa + ggtgatggtgagcatcaaacaaaaaacagcctgaggagcattaacttccttactctgcacagtaatccagggttggcttc + tgataaccaggaaagcaactctggcagcagcagggaacagcacagctctgagcaccaccagcccaggaggcacaggaaac + acggcaacatggctggccagtgggctctgagaggagaaagtccagtggatgctcttggtctggttcgtgagcgcaacaca""" + +and finally print the results one 3mer and it's occurence per line. + +write first the pseudocode, then implement it. + +bonus: +print the kmer by incresing occurences. + +solution :: + + s = s.replace('\n', '') + kmers = {} + for i in range(len(s) - 3): + kmer = s[i:i+3] + kmers[kmer] = kmers.get(kmer, 0) + 1 + + for kmer, occurence in kmers.items(): + print kmer, " = ", occurence + +solution bonus :: + + list_of_kmers = kmers.items() + from operator import itemgetter + list_of_kmers.sort(key=itemgetter(1)) + for kmer, occurence in list_of_kmers: + print kmer, " = ", occurence + + solution bonus :: + + list_of_kmers = kmers.items() + list_of_kmers.sort(key = lambda kmer: kmer[1]) + for kmer, occurence in list_of_kmers: + print kmer, " = ", occurence + + +exercice +-------- + +given the following dict : :: + + d = {1 : 'a', 2 : 'b', 3 : 'c' , 4 : 'd'} + +We want obtain a new dict with the keys and the values inverted so we will obtain: :: + + inverted_d {'a': 1, 'c': 3, 'b': 2, 'd': 4} + +solution :: + + inverted_d = {} + for key in d.keys(): + inverted_d[d[key]] = key + +solution :: + + inverted_d = {v : k for k, v in d.items()} \ No newline at end of file -- GitLab