字符串
字符串基础
字符串是Python中很常见的一种数据类型,比如日记的打印,函数的注释、数据库的访问、变量的基本操作等等。
- 描述
字符串是由独立字符组成的一个序列
name = 'jason'
city = 'beijing'
# 单引号、双引号和三引号的字符串是一模一样的
s1 = 'hello'
s2 = "hello"
s3 = """hello"""
s1 == s2 == s3
True
# 内嵌带引号的字符串
"I'm a student"
三引号字符串,主要应用于多行字符串的情景
# 函数注释
def calculate_similarity(item1, item2):
"""
Calculate similarity between two items
Args:
item1: 1st item
item2: 2nd item
Returns:
similarity score between item1 and item2
"""
字符串的常用操作
- 字符串支持索引,切片和遍历
name = 'jason'
name[0]
'j'
name[1:3]
'as'
- 遍历字符串相当于遍历字符串中的每个字符
for char in name:
print(char)
j
a
s
o
n
- 字符串是不可变的(immutable),改变一个字符串内部的字符是错误的,不允许的
s = 'hello'
s[0] = 'H'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
- Python中字符串的改变,通常只能通过创建新的字符串来完成
s = 'H' + s[1:]
s = s.replace('h', 'H')
- 使用’+='的字符串拼接方法更方便
str1 += str2 # 表示str1 = str1 + str2
实例
s = ''
for n in range(0, 100000):
s += str(n)
每次处理字符串的拼接操作时(str1+=str2),Python首先会检测str1还有没有其他的引用。
如果没有的话,就会尝试原地扩充字符串buffer的大小,而不是重新分配一块内存来创建新的字符串并拷贝。时间复杂度为O(n)
- 字符串内置函数jion也可以对字符串进行拼接
l = []
for n in range(0, 100000):
l.append(str(n))
l = ' '.join(l)
append操作是O(1)复杂度,字符串同理
- 字符串的分割函数split()
语法
string.split(separator)
表示把字符串按照separator分割成子字符串,并返回一个分割后子字符串组合的列表,常应用于对数据的解析处理
def query_data(namespace, table):
"""
given namespace and table, query database to get corresponding
data
"""
path = 'hive://ads/training_table'
namespace = path.split('//')[1].split('/')[0] # 返回'ads'
table = path.split('//')[1].split('/')[1] # 返回 'training_table'
data = query_data(namespace, table)
- 其他常见函数
string.strip(str),表示去掉首尾的str字符串;
string.lstrip(str),表示值去掉开头的str字符串;
string.rstrip(str),表示之去掉尾部的str字符串;
字符串的格式化
使用一个字符串作为模板,模板中通常有格式符。这些格式符为后续真实值预留位置,以呈现出真实值应该呈现的格式。
字符串的格式化通常用在程序的输出、logging等场景
示例
- 给定一个用户的userid,要去数据库中查询该用户的一些信息,并返回
print('no data available for person with id: {}, name: {}'.format(id, name))
在之前版本中,字符串格式化通常用%来表示
print('no data available for person with id: %s, name: %s' % (id, name))
推荐使用format函数