improve your python code(9)

xiaoxiao2021-02-28  83

1. 字符串处理小结

#!/usr/bin/env python # encoding: utf-8 """ @python version: python3.6.1 @author: XiangguoSun @contact: sunxiangguodut@qq.com @site: http://blog.csdn.net/github_36326955 @software: PyCharm @file: strmethod.py @time: 5/7/2017 12:45 PM """ """ 字符串操作 """ s = " I like the Tian'anmen Square of the Capital Beijing. " print(s.count('the')) # output:2 print("Beijing" in s) # output: true res = s.replace('.', '!') print(s, "| ", res) """ output: I like the Tian'anmen Square of the Capital Beijing. | I like the Tian'anmen Square of the Capital Beijing! """ pre, key, post = s.partition("Tian'anmen Square") print(pre,"|",key,"|",post) """ output: I like the | Tian'anmen Square | of the Capital Beijing. """ print(s.split()) print(s.split(" ")) """output: ['I', 'like', 'the', "Tian'anmen", 'Square', 'of', 'the', 'Capital', 'Beijing.'] ['', '', '', 'I', 'like', '', '', 'the', "Tian'anmen", 'Square', '', '', '', 'of', 'the', 'Capital', 'Beijing.', '', ''] """ print(s.title()) import string print(string.capwords(s)) """ output: I Like The Tian'Anmen Square Of The Capital Beijing. I Like The Tian'anmen Square Of The Capital Beijing. """ word_list = s.split() print("居中对齐:") for word in word_list: print(word.center(10)) print("左对齐") for word in word_list: print(word.ljust(10)) print("0填充") for word in word_list: print(word.zfill(5)) """output: 居中对齐: I like the Tian'anmen Square of the Capital Beijing. 左对齐 I like the Tian'anmen Square of the Capital Beijing. 0填充 0000I 0like 00the Tian'anmen Square 000of Capital Beijing. """ print(s) print(s.strip()) """ output: I like the Tian'anmen Square of the Capital Beijing. I like the Tian'anmen Square of the Capital Beijing. """ print(s) print(" ".join(s.split())) """ output: I like the Tian'anmen Square of the Capital Beijing. I like the Tian'anmen Square of the Capital Beijing. """

2.operator.itemgetter函数

operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),如若你用过padas、numpy的话,相信你对这个概念会理解。相当于那里的axis。下面看例子。

a = [1,2,3] b=operator.itemgetter(1) #定义函数b,获取对象的第1个域的 b(a) 2 b=operator.itemgetter(1,0) #定义函数b,获取对象的第1个域和第0个的值 b(a) (2, 1)

用 operator 函数进行多级排序

students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10),] sorted(students, key=itemgetter(1,2)) """sort by grade then by age""" [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

对字典排序

d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} sorted(d.iteritems(), key=itemgetter(1), reverse=True) [('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]

3. sort与sorted

persons = [{'name':'Bon','age':32}, {'name':'Alan','age':50}, {'name':'Bon','age':33}, {'name':'Job','age':23}] """sort与sorted原型: sorted(iterable[,cmp[,key[,reverse]]]) s.sort([cmp[,key[,reverse]]]) cmp:比较函数 key:带一个参数的函数,用于提取每个元素的比较值,默认为None reverse:表示结果是否反转 """ """ 先按照name有小到大排序。对于name相同的,则按照age有小到大排序 """ print(sorted(persons, key = lambda x:(x['name'],x['age']))) print(persons) persons.sort(key = lambda x:(x['name'],x['age'])) print(persons) print(persons.sort(key = lambda x:(x['name'],x['age']))) """ output [{'name': 'Alan', 'age': 50}, {'name': 'Bon', 'age': 32}, {'name': 'Bon', 'age': 33}, {'name': 'Job', 'age': 23}] [{'name': 'Bon', 'age': 32}, {'name': 'Alan', 'age': 50}, {'name': 'Bon', 'age': 33}, {'name': 'Job', 'age': 23}] [{'name': 'Alan', 'age': 50}, {'name': 'Bon', 'age': 32}, {'name': 'Bon', 'age': 33}, {'name': 'Job', 'age': 23}] None sorted会返回一个排序后的列表,原有的列表不变 而sort会直接修改原有列表,函数返回None. """ """ sorted()作用于任意可迭代对象,而sort一般作用于列表: """ a_tuple = (1,2,4,2,3) # print(a_tuple.sort()) # 报错 print(sorted(a_tuple)) # 正确 [1, 2, 2, 3, 4] from operator import itemgetter """ 对字典排序: """ phonebook = {'Linda':'7750','Bob':'9345','Carol':'5834'} sorted_pb = sorted(phonebook, key=itemgetter(1)) # 按照数字大小进行排序 print(sorted_pb) """ 多维list排序: """ gameresult = [['Bob',95,'A'],['Alan',86,'C'],['Mandy',82,'A'],['Rob',86,'E']] print(sorted(gameresult,key=itemgetter(2,1))) from operator import itemgetter """ 字典中混合list """ mydic = {'Li':['M',7], 'Lh':['M',6], 'Zhang':['E',2], 'Wang':['P',3], 'Du':['C',9], 'Ma':['C',2], 'Zhe':['H',7] } """ 下面的k=('Li':['M',7]) """ print(sorted(mydic.items(),key=itemgetter(0))) # 按照'Li'排序 print(sorted(mydic.items(),key=lambda k:itemgetter(1)(k[1]))) # 按照7排序 print(sorted(mydic.items(),key=lambda k:itemgetter(0)(k[1]))) # 按照'M'排序 """ output: [('Du', ['C', 9]), ('Lh', ['M', 6]), ('Li', ['M', 7]), ('Ma', ['C', 2]), ('Wang', ['P', 3]), ('Zhang', ['E', 2]), ('Zhe', ['H', 7])] [('Zhang', ['E', 2]), ('Ma', ['C', 2]), ('Wang', ['P', 3]), ('Lh', ['M', 6]), ('Li', ['M', 7]), ('Zhe', ['H', 7]), ('Du', ['C', 9])] [('Du', ['C', 9]), ('Ma', ['C', 2]), ('Zhang', ['E', 2]), ('Zhe', ['H', 7]), ('Li', ['M', 7]), ('Lh', ['M', 6]), ('Wang', ['P', 3])] """ """ list中混合字典; """ game = [{'name':'a','grade':2},{'name':'b','grade':1}] print(sorted(game,key=itemgetter('grade'))) """ output:[{'name': 'b', 'grade': 1}, {'name': 'a', 'grade': 2}] """
转载请注明原文地址: https://www.6miu.com/read-71997.html

最新回复(0)