文章目录

  • Python进阶系列---(3)字符串
  • 一、字符串基础
  • 1、字符串定义
  • 二、常用操作
  • (1)去除首尾指定字符
  • (2)字符串拆分
  • (3)字符串格式化
  • format方法
  • f-string方法
  • (4)字符串拼接
  • 性能思考
  • (5)大小写转换
  • (6)字符串替换
  • (7)组合多个列表输出
  • 三、注意事项


Python进阶系列—(3)字符串

一、字符串基础

1、字符串定义

常见的字符串定义方式有三种,如下所示:

s1 = 'hello'
s2 = "hello"
s3 = """hello"""
s1 == s2 == s3
True

三者等价,同时支持这三种形式的原因,重要的一点是,可以内嵌带引号的字符串:

"I'm a student in SHU"

二、常用操作

(1)去除首尾指定字符
  • string.strip(str):默认为去除空格。
  • `string.lstrip(str)``:只去掉开头的str。
  • string.rstrip(str):只去掉尾部的str。
a = "  sdf   "
a.strip()
'sdf'
b = " sdf1234"
b.rstrip('1234')
'sdf'
(2)字符串拆分

string.split(separator)

默认以空格形式分割,也可指定分割符。

a = 'asd sdf sdf 23 '
a.split()
['asd', 'sdf', 'sdf', '23']
path = 'hive://ads/training_table'
path.split('//')[1].split('/')[0]
'ads'
(3)字符串格式化
format方法
age = 33
name = 'bob'
'this is {} and his age is {}'.format(name,age)
'this is bob and his age is 33'
f-string方法

f-string方法性能优于传统%-formatting以及str.format(),使用起来也简洁明了。

f-string用大括号 {} 表示被替换字段,其中直接填入替换内容:

name = 'bob'
age = 33
f'this is {name} and his age is {age}'
'this is bob and his age is 33'
#调用表达式
f'this is {name.upper()} and his age is {age}'
'this is BOB and his age is 33'
#调用lambda函数,并指定数据格式
x = 1.5
y = 2.0
f"{(lambda x,y:x*5-2+y)(x,y):.2f}"  #保留两位小数
'7.50'

注意:字符串前需加标识符f

(4)字符串拼接

str+str

使用加号操作大量字符串效率低,因为会引起内存复制以及垃圾回收。

'a'+'b'
'ab'

join()

可利用生成器表达式,将列表数据转换为字符串的同时将其合并。

data = ['bob', 50, 91.1]
','.join(str(d) for d in data)
'bob,50,91.1'

+=

这种写法会比使用 join() 方法运行的要慢一些,因为每一次执行+=操作的时候会创建一个新的字符串对象。

s= ''
parts = ['a','b','c']
for p in parts:
    s +=p
s
'abc'
性能思考
# Version 1 (string concatenation)
f.write(chunk1 + chunk2)
# Version 2 (separate I/O operations)
f.write(chunk1)
f.write(chunk2)

如果两个字符串很小,那么第一个版本性能会更好些,因为I/O系统调用天生就慢。 另外一方面,如果两个字符串很大,那么第二个版本可能会更加高效, 因为它避免了创建一个很大的临时结果并且要复制大量的内存块数据。

(5)大小写转换
  • upper():转大写。
  • lower():转小写。
  • swapcase():大小写互换,非英文字符不变。
str = 'i love LW,but i lost her,never found,I still lover her so much'
str.swapcase()
'I LOVE lw,BUT I LOST HER,NEVER FOUND,i STILL LOVER HER SO MUCH'
(6)字符串替换

str.replace(str)

str = 'lost her,lost nothing'
str.replace('nothing','everything')
'lost her,lost everything'
(7)组合多个列表输出

zip()

countries = ['usa','china']
capital = ['washington','BeiJing']
for x,y in zip(countries,capital):
	print(f"the capital of {x} is {y}")
the capital of usa is washington
the capital of china is BeiJing

三、注意事项

python字符串是不可变的,不可随意改变 。