python 起步- str 字符串小总结

来源:互联网 发布:网络分流器怎么连接图 编辑:程序博客网 时间:2024/06/16 22:31

博客只是一种笔记,尝试将自己所学的转化自己的语言,所以难免会有错误,如果发现有不对的地方或者,我不懂的地方要是有大佬能告诉我,真的万分感谢。以前总梦想这也会那也会,做一个全栈工程师,失败,懒惰,才明白,梦想哪有那么容易,知道的越多,不知道的才更多,人生嘛,做事要有一个蓝图、框架,别太看得起自己,就是那么平凡!

str 字符串类型:
无论任何语言,字符串都是避不开的焦点,其实相对的,也是很成熟的一部分。python 中只有字符串,不支持字符,觉得这是我喜欢python重要的原因之一:简约。字节型的字符串这次不说,真的还不 是很明白,先跳过吧。

a. + 运算
>>> "rain" + "sun"
'rainsun'

直接将两个字符串加在一起,这里,以及以后要注意,python 是完全面向对象,所有的类型都是对象,所以几乎所有的类型都是引用

>>> astr = "rain">>> type(astr)<class 'str'>#引用>>> id(astr)45477376>>> bstr = astr>>> id(bstr)45477376

astr 和 bstr 都是指向一个地址,甚至在python 中会有预存表这类的操作,只要出现还没清除的值,都可以再次被引用,这个看过点python的基本都会知道的,等我知道了原理,在来翻写,
但我知道的事, 给函数传递参数的时候,最需要注意下,你抛出的参数会不会在函数体内改变??因为你可能将来调用别人的函数,要保证自己变量的安全,后话啦。 总结一下,+ 操作之后的生成字符串是新的字符串,以及str 内的方法,生成的都是新的字符串,和原来的地址上没关系,用C语言的话是 malloc一个新的地址

>>> id("rain")45477376

b. * 乘法操作:
相当于连续相加

>>> 'a'*3'aaa

字符串的引用方式:

  1. 单引号引用 ’ …’
  2. 双引号引用 “…”
  3. 三引号引用 “”” … “””
    单双没什么区别,但只有三引号允许编程的时候输入多行字符,这样说有点别扭,看例子吧,更清晰:
>>> astr = "rain">>> bstr = 'sun'#只有"""允许这样定义字符串>>> cstr = """rainsundoubleleft"""#如果 " 内的字符一行放不下,你又不想换行,可以这样:>>> cstr = "fadsf\fas">>> cstr'fadsffas'# \ 换行接着写, 在哪都能用>>> 12 + \   2335#你还想在 "" 内换行,可以使用换行符 \n

有没有想过 当你在一个字符串中想输入 \ 的时候怎么办?
r 反转义

>>> str = r"\a">>> print (str)\a

python 的序列切片不说, 以后再说,一定意义上,切片也是方法,还是看方法,方法真多,看的我头都炸了,我大致个人的分了一下类,不过耐心第一步吧,还有应用呢

大小写转换

  • capitalize():返回一个只有开头字母大写的字符串
>>> "rainsun".capitalize ()'Rainsun'
  • casefold() : 转化为小写,侵略性的小写转化,即所有编码类型的字符串都转化为对应的小写(标准字符串的编码表对应)
>>> "ß".casefold()'ss'
  • title():将字符串转化为title(每个单词的首字母大写)
>>> "rain sun".title()'Rain Sun'>>> 
  • upper():将字符串中的字母转化为大写字母,只转化unicode内的字符
>>> "faf23&&".upper()'FAF23&&'
  • lower():转化为小写字母, 也是只转化unicode内的字符字母:
>>> 'FAF23&&'.lower()'faf23&&'
  • swapcase():字符串中大写转小写,小写转大写:
>>> "ABCDefgh".swapcase()'abcdEFGH'

填充

  • center(width, char):以str 为中心,char字符(注意这里是字符)为填充,左右扩充到宽度width的长度,char 默认为空格
>>> "code".center(10, "-")'---code---'
  • zfill(width):将字符串填充到width宽度,填充材料为0, 可以跳过前缀 + 、-:
>>> "1.23".zfill(5)'01.23'>>> "-1.12".zfill(10)'-000001.12'
  • ljust(width, char):字符串向右填充,宽度为width, 填充字符默认空格:
>>> "abcd".ljust(10)'abcd      '
  • join(iterable):将str 插入每个 iterable 的元素缝隙中,并返回构造出来的字符串,不过iterable中必须是字符串:
>>> "00".join("abcdefg")'a00b00c00d00e00f00g'>>> f = ["rain", "sun"]>>> "00".join(f)'rain00sun'

字符串查找

  • count(sub, a, b):计算 str 中的sub 的出现个数,a、b为查找区间可以不设置,或者只设置一个,不设置默认为全字符串;只设置一个,默认从 a 开始查找,到字符串结束,[a, b)
>>> "abcdafg".count('a')2>>> "abcdafg".count('a',3 )1>>> "abcdafg".count('a',2, 4)0
  • startswith(sub, start, end):检查字符串开头,见下,endswith()

  • endswith(sub, start, end):将检查字符串是以sub结尾,start为比较的开始地方,end为比较的结束地方,[start, end)

>>> "rainsun".endswith("sun")True>>> "012345".endswith("45",4 )True>>> "012345".endswith("34", 3,5)True
  • find(sub, start, end):在str中查找字符串sub ,如果找到,返回第一个匹配的字符串的首位置, 可以设置查找范围为 [start,end) 或者 [start,结束],这里还是说一下,start , end 其实就是设置切片的范围,看到例子中那个-1,你就明白了。还是一样没参数默认全部字符串。如果没有匹配返回-1
>>> "012012012".find("12", 0 , -1)1 #第一个匹配的首地址是s[1]
  • index(sub, start, end):start ,end就在重复,index 和find 几乎一样,但都是返回位置下标,但是不同点,如果没有匹配,直接报错
>>> "012345".index("6")Traceback (most recent call last):  File "<pyshell#43>", line 1, in <module>    "012345".index("6")ValueError: substring not found>>> "012345".find("6")-1

字符串替代

  • replace(old, new, count):使用 new字符串 代替str字符串中 old字符串,count 表示代替次数,默认全部代替
>>> "abcdabcd".replace("a", "哇")'哇bcd哇bcd'>>> "abcdabcd".replace("a", "哇", 1)'哇bcdabcd'
  • expandtabs(tabszie=8):扩展\t转义字符串,tab 的大小默认为8,也可以自己传参数进去
>>> strs = """123\t431234\t4312345\t43""".expandtabs()>>> print (strs)123     431234    4312345   43>>> 

字符串切割

  • strip(chars):删除字符串开始或者结束的chars字符串中的字符,默认为空格,注意是开始和结束,不是中间的:
>>> "01010101430101012421401010101".strip('01')'4301010124214'
  • split(sub=None, maxsplit=-1):切割字符串,以sub为界限,返回切割后的列表(不包含sub),maxsplit 最大切割数目,默认-1,完全切割,sub默认空格:
>>> "rain ab sun ab double ab left".split(" ab ")['rain', 'sun', 'double', 'left']>>> "rain ab sun ab double ab left".split(" ab ", 2)['rain', 'sun', 'double ab left']>>> "rain ab sun ab double ab left".split()['rain', 'ab', 'sun', 'ab', 'double', 'ab', 'left']
  • partition(sep):返回以sep为分界线切割字符串而形成的三元元组,sep 匹配到第一个开始切割:
>>> "abcdefcdef".partition("cd")('ab', 'cd', 'efcdef')
  • splitline(keepends):以换行符为基准切割字符串,主要用在兼容不同系统吧,具体不是很了解,有点像 split(‘\n’)
>>> "rain\nsun\nbun\nrain".splitlines()['rain', 'sun', 'bun', 'rain']

编码设置

  • encord(encording=”utf-8”, error=”“):自从3.0的编码类型默认为utf-8,这种设置新手就很少用,所以暂不总结

格式化输出

  • format(*parm1, **parm2):str 的标准输出,具体标准要看文档:
    用法就像C#中的输出
>>> "{0}, {1}".format("rain", "sun")'rain, sun'
  • format_map(mapping):这个我理解了大半天,才明白说什么,英语不好,一个单词一个单词的翻译你也不一定知道文档说什么,它和maketrans 联用相当于密码表,可以转换str 中的字符:
>>> map1 = "01234">>> map2 = "abcde">>> dict = str.maketrans(map2,map1)>>> "you are a bad boy".translate(dict)'you 0r4 0 103 1oy'>>> dict{48: 97, 49: 98, 50: 99, 51: 100, 52: 101}

你也完全可以自己做一个mapping,然后放进去 maketrans() 就是做一个映射字典。maketrans 是一个静态函数,不过python中不是没有正经的静态函数吗?有待学习

字符串判断 is族

isdecimal()
isnumeric()
isdigit() :以上三个都是判断数字字符的,区别有点大,主要是针对阿拉伯数字,中文数字,罗马数字,等等不同数字
isupper()
islower()
istitle() :判断大小写
isidentifier():判断标识符
isspace():判断空格
isalpha():判断字母
isalnum() :判断字母数字
isprintable():判断是否可打印

r 、 l 左右族

rfind(sub[, start[, end]])
rindex(sub[, start[, end]])
rjust(width[, fillchar])
rpartition(sep)
rsplit(sep=None, maxsplit=-1)
rstrip([chars])
lstrip([chars])
没有什么可以说的, r表示从右边开始, l表示从坐边开始
和原来的方法功能都一样

end…
字符串还有格式化输出,补一句, like this:

>>> str = "rain is %s">>> str'rain is %s'>>> print (str)rain is %s>>> print (str %("bad boy"))rain is bad boy

万能膏药,几乎在哪都能这样用,怎么重载的我就不知道了

原创粉丝点击