一、字符串的处理
字符串对齐处理
要将字符串格式化输出,比如格式化输出一个字典类型的数据
dict_data = { "peter": 80, "stark": 99, "thor": 60, "banner": 98, "clint": 80 } for k, v in dict_data.items(): print('{}: {}'.format(k, v)) 复制代码
执行上述代码,输出结果如下:
peter: 80 stark: 99 thor: 60 banner: 98 clint: 80 复制代码
将 Key 和 Value 作对齐处理,有两种方式:
第一种是使用字符串对象 str 的 ljust
、rjust
和 center
方法进行左右中对齐操作
# 其余代码保持不变 for k, v in dict_data.items(): print('{}: {}'.format(k.ljust(6), str(v).ljust(6))) 复制代码
执行上述代码,输出结果如下:
peter : 80 stark : 99 thor : 60 banner: 98 clint : 80 复制代码
通过 ljust 方法实现了对齐,ljust
、rjust
和 center
方法的第一个参数为长度是必填参数,第二个参数是填充的字符,默认是空格,长度如果大于字符串的长度则会用空格或者指定的字符来填补,如果小于字符串的长度,则无变化,原样输出字符串
name = 'peter' print(name.ljust(10, '*')) print(name.rjust(10, '*')) print(name.center(10, '*')) print(name.ljust(1, '*')) 复制代码
执行上述代码,输出结果如下:
peter***** *****peter **peter*** peter 复制代码
第四个输出语句指定的长度是小于字符串的长度的,输出的结果为原字符串。
第二种方式是使用内置的 format 方法进行对齐,在 format 方法中 <10
表示左对齐长度为10,>10
表示右对齐长度为10,^10
表示中间对齐长度为10
name = 'peter' print(format(name, '<10')) print(format(name, '>10')) print(format(name, '^10')) print(format(name, '<1')) 复制代码
执行上述代码,输出结果如下:
peter peter peter peter 复制代码
使用 format 方法进行对齐输出,要注意 format 方法与字符串对象的 format 方法区分。
# 字典数据保持不变 for k, v in dict_data.items(): print('{}: {}'.format(format(k, '<10'), format(v, '<10') )) 复制代码
执行上述代码,输出结果如下:
peter : 80 stark : 99 thor : 60 banner : 98 clint : 80 复制代码
去掉字符串中的无效字符
在后端处理前端表单中传来的数据时,以登录为例,通常都会对登录的用户名进行去空格处理,防止用户输入空格导致用户密码校验失败,获取去除字符串中的其他格式符如 \n
、\t
等。
可以使用字符串对象的 strip
方法,包括 lstrip
和 rstrip
方法取出两端的指定字符,默认去除空格,也可以指定要出的特殊字符
print(' stark '.strip()) print(' stark '.lstrip()) print(' stark '.rstrip()) print('+-stark*/ '.strip(' +-*/')) 复制代码
执行上述代码,输出内容如下:
stark stark stark stark 复制代码
可以使用切片以及拼接的方式来处理字符串中单个固定位置的字符
code = 'Mark-86' print(code[:4] + code[5:]) 复制代码
执行上述代码,输出结果如下:
Mark86 复制代码
也可以使用字符串的 replace
方法或者正则表达式的 sub
方法来替换任意位置的字符
data = 'stark\nbanner\nthor' data = data.replace('\n', ' ') print(data) 复制代码
执行上述代码,输出结果如下:
stark banner thor 复制代码
但是字符串的 replace 一次只能替换一种字符,要一次替换多种字符就需要使用到正则表达式的 sub
方法,该方法第一个参数为要替换的字符,使用 []
包裹,第二个参数是要替换成什么字符串,第三个参数是要进行处理的字符串。
import re data = 'stark\nbanner\nthor\t' data = re.sub('[\n\t]', ' ', data) print(data) 复制代码
执行上述代码,输出结果如下:
stark banner thor 复制代码
还可以使用字符串对象的 translate
方法,可以同时删除多种不同的字符。translate
方法可以将一个字符映射到另一个字符串,既某一个字符改变为一个指定的字符。
txt = "Hello Ruby!" x = "e" y = "a" # 建立映射关系 mytable = txt.maketrans(x, y) print(txt.translate(mytable)) 复制代码
执行上述代码,输出结果如下:
Hallo Ruby! 复制代码
使用 translate
方法的关键是首先要调用 maketrans
方法建立映射关系,然后在调用 translate
方法进行替换。
二、列表、字典和集合的处理
你知道几种在列表、字典和集合中筛选符合条件的数据的方式 ?
for 循环
筛选出列表中大于0的元素
新建一个空列表,保存符合条件的数据。使用 for
循环迭代每一个元素,对每一个元素进行判断,符合条件就放入新建的列表。
def filter_positive_by_for_from_list(nums): _nums = [] for num in nums: if num > 0: _nums.append(num) return _nums if __name__ == '__main__': nums = [1, -1, 10, 2, 5, -9, -8, 7] _nums = filter_positive_by_for_from_list(nums) print(_nums) 复制代码
执行上述代码,输出结果如下:
遍历所有数据并进行判断,效率较低