字符串 str 基本用法
字符串
- 字符组成的有序序列,字符的集合
- 不可变对象
- 可迭代
- python3 起,字符串都是 Unicode
字符串定义及初始化
- 单引号,双引号,三引号
r'c:\windows\monkey'
字符串元素访问
- 索引
字符串 join 方法
- 'string'.join(iterable)
- 返回新的字符串 str
- 将可迭代对象连接起来,使用'string'作为分隔符
# 如字符串去重(该方法并不是字符串去重推荐的方法,这里仅用于举例)
def fn(s):
return ''.join(set(s))
字符串+
连接
- 连接两个字符串并返回一个新的字符串
字符串拼接+=
s = ''
for n in range(0, 100000):
s += str(n) # s = s + str(n)
每次循环,似乎都得创建一个新的字符串;而每次创建一个新的字符串,都需要 O(n) 的时间复杂度。因此,总的时间复杂度就为 O(1) + O(2) + … + O(n) = O(n^2)。这样到底对不对呢?
乍一看,这样分析确实很有道理,但是必须说明,这个结论只适用于老版本的 Python 了。自从 Python2.5 开始,每次处理字符串的拼接操作时(str1 += str2),Python 首先会检测 str1 还有没有其他的引用。如果没有的话,就会尝试原地扩充字符串 buffer 的大小,而不是重新分配一块内存来创建新的字符串并拷贝。这样的话,上述例子中的时间复杂度就仅为 O(n) 了
字符串分隔
- split
- split
- rsplit
- splitlines
- partition
- partition(sep)
- rpartition(sep)
字符串大小写转换
- upper()
- lower()
- swapcase()
字符串修改
- replace(old,new[,count])
- strip([chars])
字符串查找
- find(sub[,start[,end]])
- [start,end) 区间从左到右查看子串 sub
- 找到返回索引,没找到返回 - 1
- rfind
- index(sub[,start[,end]])
- [start,end) 区间从左到右查看子串 sub
- 找到返回索引,没找到抛出 ValueError 异常
- rindex
- count(sub[,start[,end]])
- [start,end) 区间从左到右统计子串 sub 出现的次数
字符串长度
- len()
字符串判断
- endswith(substr,[,start[,end]])
- 在区间 [start,end),字符串是否是 substr 结尾
- 返回 bool
- startswith(substr,[,start[,end]])
- 在区间 [start,end),字符串是否是 substr 开头
- is 系列
- isalnum() -> bool 是否是字母和数字组成
- isalpha() 是否是字母
- isdecimal() 是否只包含十进制数字
- isdigit() 是否全部数字 (0~9)
- isidentifier() 是不是字母和下划线开头,其他都是字母、数字、下划线
- islower() 是否都是小写
- isupper() 是否全部大写
- isspace() 是否只包含空白字符
字符串格式化
- %-formatting:c 风格格式化
- str.format
- "{}{kwargs}".format(*args,**kwargs)
"{} {name} {} {}".format(1, 2, 'a', name='monkey') "{0} {1} {2}".format([1,2],3,'a')
- 返回 str
- f-Strings格式化
- py3.6+,pep498
- 更简洁,以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换
def test(name: str): return name.upper() class Test: def __init__(self, name): self.name = name def __str__(self): return f"hello {self.name}" def __repr__(self): return f"haha, hello {self.name}" name = "jerry" j = Test(name) print(f"hello {name}") # hello jerry print(F"hello {name}") # hello jerry print(f'{2 * 3 + 1}') # 7 print(f'hello {test(name)}') # hello JERRY print(f"{j}") # hello jerry print(f"{repr(j)}") # haha, hello jerry print(f"{j!r}") # haha, hello jerry print(f"You are very \"handsome\"") # You are very "handsome" 可以用反斜杠进行转义字符 # print(f"{You are very \"handsome\"}") # 反斜杠不能在 f-string 表达式中使用
参考
- magedu