基础

字符串是由独立字符组成的一个序列,通常包含在 '...'"...""""..."""

1
2
3
name = 'jason'
city = "guangzhou"
desc = """I'm a software engineer"""
1
2
3
4
s1 = 'rust'
s2 = "rust"
s3 = """rust"""
print(s1 == s2 == s3) # True

便于在字符串中,内嵌引号的字符串

1
2
s = "I'm a string"
print(s) # I'm a string

"""...""" 常用于多行字符串,如函数注释

image-20241029184612149

Python 支持转义字符

b7a296ab8d26664e03a076fa50d5b152

1
2
3
4
s = 'a\nb\tc'
print(s)
# a
# b c

操作

字符串相当于一个由单个字符组成的数组,同样支持索引切片遍历等操作

1
2
3
4
name = 'jason'

print(name[0]) # j
print(name[1:3]) # as

遍历字符串中的每个字符

1
2
3
4
5
6
7
8
9
10
name = 'jason'

for char in name:
print(char)

# j
# a
# s
# o
# n

字符串是 immutable

1
2
s = 'rust'
s[0] = 'R' # TypeError: 'str' object does not support item assignment

只能创建新的字符串 - Python 暂无可变的字符串类型,时间复杂度往往为 O(N) - 性能会持续迭代优化
Java StringBuilder可变的字符串类型,无需创建新的字符串,时间复杂度为 O(1)

1
2
3
4
5
6
7
s = 'rust'

s = 'R' + s[1:] # create a new string
print(s) # Rust

s = s.replace('R', 'r') # create a new string
print(s) # rust

str1 += str2 - 原地扩充

1
2
3
s = ''
for i in range(0, 100000):
s += str(i) # O(n)
  1. 老版本 Python - O(N^2) = O(1) + O(2) + … + O(N)
  2. Python 2.5+,针对 str1 += str2
    • 首先检测 str1 是否还有其它引用,如果没有,则会尝试原地扩充字符串 Buffer 的大小 - O(N)

string.join(iterable) - 把每个元素按照指定的格式连接起来

1
2
3
4
l = []
for i in range(0, 100000):
l.append(str(i))
s = ','.join(l)

string.split(separator) - 将字符串按照 separator 分割成子字符串,并返回一个分割后字符串组成的列表

1
2
3
path = 'hive://ads/training_table'
namespace = path.split('//')[1].split('/')[0] # ads
table = path.split('//')[1].split('/')[1] # training_table

strip

Method Desc
string.strip(str) 去掉首尾的 str 字符串
string.lstrip(str) 只去掉开头的 str 字符串
string.rstrip(str) 只去掉尾部的 str 字符串

格式化

  1. 使用一个字符串作为模板,其中会有格式符
  2. 格式符为后续真实值预留位置,呈现真实值应该呈现的格式

string.format(args) – 最新的字符串格式化函数与规范(推荐) - Java 中模板字符串

1
2
3
uid = 1
name = 'jason'
print('no data available for person with uid: {}, name: {}'.format(uid, name))

早期 Python 版本,通常使用 %

1
2
3
4
uid = 1
name = 'jason'
print('no data available for person with uid: {}, name: {}'.format(uid, name))
print('no data available for person with uid: %s, name: %s' % (uid, name))