List of python algorithms
Basic Usage
car = ['audi','bmw','benchi','lingzhi']
-
Create a list of numbers
numbers = list(range(1,4)) >>> print(numbers) [1, 2, 3]
-
Access values in the list
car = ['audi','bmw','benchi','lingzhi'] >>> print(car[0].title()) Audi >>> print(car[2].title()) Benchi
#The title() method takes any list element and capitalizes the first letter
list1 = ['Google','baidu','1997','2000'] list2 = [1,2,3,4,5,6,7] >>> print("list1[0]:",list1[0]) list1[0]: Google >>> print("list2[0]:",list2[1:5]) list2[0]: [2, 3, 4, 5]
#The index starts from 0. For example, if the index is 0, it means the first one, and if the index is 1, it means the second one; Index intervals are generally left closed and right open. For example, [1,5] indicates from index 1 to index 4, that is, the second to fifth.
Delete duplicate elements and leave the order unchanged
If the elements saved in the sequence are hashable, the function of de duplication can be realized by collection and generator. Examples are as follows:
def dedupe(items): seen = set() #Create an empty collection for item in items: if item not in seen: yield item seen.add(item) #Add elements to the collection if __name__ == '__main__': a = [5,5,2,1,9,1,5,10] print(a) print(list(dedupe(a))) #output ''' [5, 5, 2, 1, 9, 1, 5, 10] [5, 2, 1, 9, 10] '''
Yield is actually equivalent to return, but the existence of yield is a generator rather than a function. Please refer to the article for details Portal
About collections: the elements in a collection are not repeated and have no order. The basic purposes of collections are member testing and de duplication of entries. Set objects also support mathematical operations such as union, intersection, difference and symmetric difference. Curly braces or the set() function can be used to create a collection. Note: to create an empty set, you must use set (), not {}; The latter will create an empty dictionary.
About hashing: if an object is hashable, its lifetime must be immutable. In python, integers, floating-point numbers, strings and tuples are immutable, that is, hashable.
-
If in a sequence of non hashable objects
In the following list a, the element is a dictionary and is not hashable.
Idea: convert non hashable to hashable, and then operate.
def buha(items, key=None): seen = set() for item in items: val = item if key is None else key(item) if val not in seen: yield item seen.add(val) if __name__ == '__main__': a = [ {'x':2, 'y':3}, {'x':1, 'y':4}, {'x':2, 'y':3}, {'x':2, 'y':3}, {'x':10, 'y':15} ] print(a) print(list(buha(a, key=lambda a: (a['x'],a['y'])))) #The lambda function converts {X ': 2,' y ': 3} into a (2,3) hashable object #output ''' [{'x': 2, 'y': 3}, {'x': 1, 'y': 4}, {'x': 2, 'y': 3}, {'x': 2, 'y': 3}, {'x': 10, 'y': 15}] [{'x': 2, 'y': 3}, {'x': 1, 'y': 4}, {'x': 10, 'y': 15}] '''
Find the most frequent element in the list
Use most in the Counter class in the collections module_ The common () method can be implemented
from collections import Counter words = [ 'look','into','my','AAA','look','my','AAA','the','look','AAA','my','into', 'the' ] word_counts = Counter(words) #The Counter class counts the number of occurrences of each element top_three = word_counts.most_common(3) #most_ The method of common returns up to three elements print(word_counts) print(top_three) #output ''' Counter({'look': 3, 'my': 3, 'AAA': 3, 'into': 2, 'the': 2}) [('look', 3), ('my', 3), ('AAA', 3)] '''
Example of sorting class definition
from operator import attrgetter class User: def __init__(self, user_id): self.user_id = user_id def __repr__(self): return 'User({})'.format(self.user_id) #Original order users = [User(19), User(17), User(18)] print(users) #According to user_id order print(sorted(users, key=lambda u:u.user_id)) #Using lambda functions print(sorted(users, key=attrgetter('user_id'))) #Use operator Attrgetter() built in function #output ''' [User(19), User(17), User(18)] [User(17), User(18), User(19)] [User(17), User(18), User(19)] '''
About sorted()
sorted(iterable, key=None, reverse=False) ''' iterable -- Iteratable object. key -- It is mainly used to compare the elements. There is only one parameter. The parameters of the specific function are taken from the iteratable object. Specify an element in the iteratable object to sort. reverse -- Collation, reverse = True In descending order, reverse = False Ascending (default). '''
Use list derivation
List derivation is a beautiful method to simplify the code. It can construct a new list very concisely. The obtained elements can be transformed and deformed with a simple expression.
The syntax format is as follows:
variable = [out_exp_res for out_exp in input_list if out_exp==2] ''' out_exp_res: List generated element expression, which can be a function with return value for out_exp in input_list: iteration input_list, take out_exp afferent out_exp_res In expression if out_exp==2: Judge which values can be filtered according to the conditions '''
Example: create a square list from 1 to 10
#tradition squares = [] for x in range(10): squares.append(x**2) print(squares) #concise exmple = [i**2 for i in range(1,11)] print(exmple) ''' output [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] '''
Example: output an integer that can be divided by 3 within 30
#tradition squares = [] for x in range(30): if x%3==0: squares.append(x) print(squares) #concise exmple = [i for i in range(30) if i%3==0] #Or i%3 is 0 print(exmple) ''' output [0, 3, 6, 9, 12, 15, 18, 21, 24, 27] '''
Example: output the square of an integer that can be divided by 3 within 30
#Functions can be used def squared(x): return x*x multiples = [squared(i) for i in range(30) if i%3 is 0] print(multiples) #Of course, it can also be more concise exmple = [i**2 for i in range(30) if i%3 is 0] print(exmple) ''' output [0, 9, 36, 81, 144, 225, 324, 441, 576, 729] '''
-
Filter data in list
mylist = [1,4,-5,10,-7,2,3,-1] #All positive values zheng = [n for n in mylist if n>0] print(zheng) #All negative values fu = [n for n in mylist if n<0] print(fu) ''' output [1, 4, 10, 2, 3] [-5, -7, -1] '''
-
If exception handling or other complex details are involved in the filtering process, you can consider putting the code in a single function.
values = ['1','2','-3','-','4','N/A','5'] def is_int(val): try: x = int(val) return True except ValueError: return False ivals = list(filter(is_int, values)) print(ivals) ''' output ['1', '2', '-3', '4', '5'] '''
#The filter function is used to filter the sequence. The receives two parameters. The first is a function and the second is a sequence. Each element of the sequence is passed to the function as a parameter for judgment, and then returns True or False. Finally, the element that returns True is placed in the new list.
Named slice
slice() function can be used to realize slicing object and parameter transfer function in slicing operation function. It can be used in any place where slicing operation is allowed.
class slice(stop) class slice(start, stop[,step]) ''' star Starting position stop End position step step '''
Example:
items = [0, 1, 2, 3, 4, 5, 6] a = slice(2,4) print(items[2:4]) #[2,3] print(items[a]) #[2,3] items[a] = [10, 11] print(items) #[0, 1, 10, 11, 4, 5, 6] print(a.start) #2 print(a.stop) #3 print(a.step) #None s = 'HelloWorld' print(a.indices(len(s))) #(2, 4, 1) for i in range(*a.indices(len(s))): # *The function of number is to disassemble the iteratable sequence as the argument of the function #Here is to split the tuple (2, 4, 1) into 2, 4, 1 print(s[i]) #l #l
Indexes (len) function, whose return value is a tuple composed of three integer numbers; These numbers are the start and stop index numbers and step step values of the slice, respectively. Return when len is greater than or equal to stop (start, stop, step), and return when len is less than stop (start, len, step)
For * in python, refer to the article Portal