python对字符串的操作

     字符串操作,在编程中很常见,虽然简单,但是细节比较多,现在在这里做一个总结,以供后期查阅学习:

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(),

3fe678f90793268e2b62651a2e0bdf0d.png

 其中:

###在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)对字符串出现的字符进行统计

》连续段统计

》整个字符串统计字符

未完待续

参考链接:

https://blog.csdn.net/swan_tang/article/details/82792657(Python字符串操作大全(一))

https://blog.csdn.net/swan_tang/article/details/82830782(Python字符串操作全(二))

https://blog.csdn.net/kizgel/article/details/80597954(Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n)

https://www.cnblogs.com/yujihaia/p/7468253.html(python 字符串常用操作)

https://www.cnblogs.com/who-care/p/9306800.htmlpython 字典、列表、字符串 之间的转换

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值