Python 编程骚操作:字符串、列表、字典和集合的处理(Part B)

2022-09-1811:13:48编程语言入门到精通Comments736 views字数 2497阅读模式

一、字符串的处理

字符串对齐处理文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

要将字符串格式化输出,比如格式化输出一个字典类型的数据文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

dict_data = {
    "peter": 80,
    "stark": 99,
    "thor": 60,
    "banner": 98,
    "clint": 80
}

for k, v in dict_data.items():
    print('{}: {}'.format(k, v))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

peter: 80
stark: 99
thor: 60
banner: 98
clint: 80

将 Key 和 Value 作对齐处理,有两种方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

第一种是使用字符串对象 str 的 ljustrjustcenter 方法进行左右中对齐操作文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

# 其余代码保持不变

for k, v in dict_data.items():
    print('{}: {}'.format(k.ljust(6), str(v).ljust(6)))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

peter : 80    
stark : 99    
thor  : 60    
banner: 98    
clint : 80    

通过 ljust 方法实现了对齐,ljustrjustcenter 方法的第一个参数为长度是必填参数,第二个参数是填充的字符,默认是空格,长度如果大于字符串的长度则会用空格或者指定的字符来填补,如果小于字符串的长度,则无变化,原样输出字符串文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

name = 'peter'
print(name.ljust(10, '*'))
print(name.rjust(10, '*'))
print(name.center(10, '*'))
print(name.ljust(1, '*'))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

peter*****
*****peter
**peter***
peter

第四个输出语句指定的长度是小于字符串的长度的,输出的结果为原字符串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

第二种方式是使用内置的 format 方法进行对齐,在 format 方法中 <10 表示左对齐长度为10,>10 表示右对齐长度为10,^10 表示中间对齐长度为10文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

name = 'peter'
print(format(name, '<10'))
print(format(name, '>10'))
print(format(name, '^10'))
print(format(name, '<1'))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

peter     
     peter
  peter   
peter

使用 format 方法进行对齐输出,要注意 format 方法与字符串对象的 format 方法区分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

# 字典数据保持不变

for k, v in dict_data.items():
    print('{}: {}'.format(format(k, '<10'), format(v, '<10') ))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

peter     : 80        
stark     : 99        
thor      : 60        
banner    : 98        
clint     : 80 

去掉字符串中的无效字符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

在后端处理前端表单中传来的数据时,以登录为例,通常都会对登录的用户名进行去空格处理,防止用户输入空格导致用户密码校验失败,获取去除字符串中的其他格式符如 \n\t 等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

可以使用字符串对象的 strip 方法,包括 lstriprstrip 方法取出两端的指定字符,默认去除空格,也可以指定要出的特殊字符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

print('  stark  '.strip())
print('  stark  '.lstrip())
print('  stark  '.rstrip())
print('+-stark*/  '.strip(' +-*/'))

执行上述代码,输出内容如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

stark
stark  
  stark
stark

可以使用切片以及拼接的方式来处理字符串中单个固定位置的字符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

code = 'Mark-86'

print(code[:4] + code[5:])

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

Mark86

也可以使用字符串的 replace 方法或者正则表达式的 sub 方法来替换任意位置的字符文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

data = 'stark\nbanner\nthor'
data = data.replace('\n', ' ')
print(data)

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

stark banner thor

但是字符串的 replace 一次只能替换一种字符,要一次替换多种字符就需要使用到正则表达式的 sub 方法,该方法第一个参数为要替换的字符,使用 [] 包裹,第二个参数是要替换成什么字符串,第三个参数是要进行处理的字符串。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

import re

data = 'stark\nbanner\nthor\t'
data = re.sub('[\n\t]', ' ', data)

print(data)

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

stark banner thor 

还可以使用字符串对象的 translate 方法,可以同时删除多种不同的字符。translate 方法可以将一个字符映射到另一个字符串,既某一个字符改变为一个指定的字符。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

txt = "Hello Ruby!"

x = "e"
y = "a"

# 建立映射关系
mytable = txt.maketrans(x, y)
print(txt.translate(mytable))

执行上述代码,输出结果如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

Hallo Ruby!

使用 translate 方法的关键是首先要调用 maketrans 方法建立映射关系,然后在调用 translate 方法进行替换。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

二、列表、字典和集合的处理

你知道几种在列表、字典和集合中筛选符合条件的数据的方式 ?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

for 循环筛选出列表中大于0的元素文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

新建一个空列表,保存符合条件的数据。使用 for 循环迭代每一个元素,对每一个元素进行判断,符合条件就放入新建的列表。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

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)

执行上述代码,输出结果如下: Python 编程骚操作:字符串、列表、字典和集合的处理(Part B) 遍历所有数据并进行判断,效率较低!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

作者:RiemannHypothesis
来源:稀土掘金文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/27830.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/27830.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定