字符串操作,在编程中很常见,虽然简单,但是细节比较多,现在在这里做一个总结,以供后期查阅学习:
1、常见的基本操作(增删改查)
字符串在python中是一种常见的基本数据结构,存放在文字常量区。在日常使用中常见的增删改查操作具体如下:
(1)单一类型
str1="adhjafd"
str2=str1+'er' ##增 adhjafder
str3="adh" ##删 间接
str1='xksdg' ##改 xksdg 注意不能使用str1[2]下标来进行修改
str1.find('ad') ##查 0
常见的字符串操作:
操作符 | 描述 | 实例 |
+ | 字符串连接 | >>>a + b 'HelloPython' |
* | 重复输出字符串 | >>>a * 2 'HelloHello' |
[] | 通过索引获取字符串中字符 | >>>a[1] 'e' |
[ : ] | 截取字符串中的一部分 | >>>a[1:4] 'ell' |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True | >>>"H" in a True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True | >>>"M" not in a True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 | >>>print r'\n' \n >>> print R'\n' \n |
% | 格式字符串,与{}和.format{}功效相同 | >>>(a :%d)%(a) 输出a的值 |
一些常见的小操作:
- 去除前后空格:str.strip(),str.lstrip(),str.rstrip()
- 判断是否数字或字符 str[i].isdigital() str[i].isalpha()
但是对于常见pop,insert等操作,字符串类型并不支持,可以考虑用replace来代替,或者将其转化为list,然后再进行操作,最后再转化回字符串,比如,
str="1234"
st=list(str).pop()
str="".join(st)
(2)多种类型
现实中我们遇到的字符串一般都是混合了多种数据类型,这样需要根据目标进行一些特定操作,如
str="124234 sdjgg msdangj +sbdbfb fdmgbmb sdf2324ksdkf"
想要将str根据空格分割开来,需要借助函数
(3)f-string,亦称为格式化字符串常量(formatted string literals),是Python3.6新引入的一种字符串格式化方法,该方法源于PEP 498 – Literal String Interpolation,主要目的是使格式化字符串的操作更加简便。f-string在功能方面不逊于传统的%-formatting语句和str.format()函数,同时性能又优于二者,且使用起来也更加简洁明了,因此对于Python3.6及以后的版本,推荐使用f-string进行字符串格式化。
>>> name = 'Eric'
>>> f'Hello, my name is {name}'
'Hello, my name is Eric'
>>> number = 7
>>> f'My lucky number is {number}'
'My lucky number is 7'
>>> price = 19.99
>>> f'The price of this book is {price}'
'The price of this book is 19.99'
2、切片、排序、比较等
对于字符串,可以利用切片对其进行访问或其他操作
同样比较排序如下:
str=['asd','bca','asda']
print(str[0]>str[1]) ####false
print(str[0]<str[2]) ####true
str.sort() ###['asd', 'asda', 'bca']
str.count('a') ####0
str.count('asd') ####1
3、字符串的转换与拼接
》python拼接字符串一般有以下几种方法:
- 直接通过(+)操作符拼接 "sdf"+"sdfgg" sdfsdfgg
- 通过str.join()方法拼接 str=["sdaf","dsfg"] ('').join(str) sdafdsfg
- 通过str.format()方法拼接 {}{}.format("hello","world") helloworld
- 通过(%)操作符拼接 (%s%s)%("hello","world") helloworld
》字符串与字典/列表之间的相互转换
- 列表转字符串(利用‘’.join()或直接强制转换str,如果list中有数字,需要先将数字转化为str,即" ".join('%s' %id for id in list1)):
- 字符串转列表(该字符串必须内部是列表形式,若是““as”,"asfg","sdf"”则利用eval函数会将字符串转化为元祖的形式,或者利用list强制转换)
- 字符串转字典:
用eval转换
用json.loads 转换
- 字典转字符串:
用json.dumps 转换
强转换
补充:
- 列表转字典:
将两个列表转成字典
将嵌套列表转为字典
- 字典转列表:
字典中键、值转为列表
- 矩阵和列表的相互转换
>>> from numpy import *
>>> a1 = [[1,2,3],[4,5,6]] #列表
>>> a2 = array(a1) #数组
>>> a2
array([[1, 2, 3],
[4, 5, 6]])
>>> a3 = mat(a1) #矩阵
>>> a3
matrix([[1, 2, 3],
[4, 5, 6]])
>>> a4 = a2.tolist() #数组转列表
>>> a4
[[1, 2, 3], [4, 5, 6]]
>>> a5 = a3.tolist() #矩阵转列表
>>> a5
[[1, 2, 3], [4, 5, 6]]
>>> a4 == a5
True
4、读取字符串文件
在日常码代码中,经常会遇到打开或生成各种各样的文件,这时候我们读取操作的都是字符串,常见的方法在Python中有 三种读文件方法read(), readline(), readlines(),
其中:
###在demo.txt文件中,有35durant
### teamGSW 两行数据
》with open("demo.txt", "r") as f:
data = f.read()
print(data)
print(type(data))
output[1]:
35durant
teamGSW
》with open("demo.txt", "r") as f:
data = f.readline()
print(data)
print(type(data))
output[1]:
35durant
<class 'str'>
》with open("demo.txt", "r") as f:
data = f.readlines()
print(data)
print(type(data))
output[1]:
['35durant\n', 'teamGSW']
<class 'list'>
去除行尾的‘\n’,以readlines()方法返回的list与read()方法返回的str为例, 分别进行说明.
1.以list为例
with open("demo.txt", "r") as f:
data = f.readlines()
print(data)
a = data[0][:-1]
b = data[1]
print(a, b)
output[1]:
['35durant\n', 'teamGSW']
35durant teamGSW
2.基于str的splitlines()方法
with open("demo.txt", "r") as f:
data = f.read().splitlines()
print(data)
output[1]:
['35durant', 'teamGSW']
5.字符串常见操作
(1)字符串全排列
def perm(s=''):
if len(s) <= 1: ####递归终止条件
return [s]
sl = []
for i in range(len(s)): ####选择第i位
for j in perm(s[0:i] + s[i + 1:]): ####去除第i位后字符的全排列情况
sl.append(s[i] + j) ####将其全排列情况放入list中
return sl
def main():
# 可能包含重复的串
perm_nums = perm('abb')
# 对结果去重
no_repeat_nums = list(set(perm_nums)) ####利用集合set去重
print('perm_nums', len(perm_nums), perm_nums)
print('no_repeat_nums', len(no_repeat_nums), no_repeat_nums)
pass
if __name__ == '__main__':
main()
###或者直接调用permutation库函数
from itertools import permutation
s="abc"
re1=list(permutation(s,3)) ####3是指定要参与全排列字符个数
print(re1)
'''
结果是:
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
想要转换成字符串的形式,利用以下代码即可
[('').join(i) for i in list(permutations(s,3))]
结果为:
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
'''
(2)对字符串出现的字符进行统计
》连续段统计
》整个字符串统计字符
未完待续