Python学习笔记(十一) 分支结构语句之字符串运算符和python的字符串函数

举报
菜鸟级攻城狮 发表于 2021/05/22 14:23:48 2021/05/22
【摘要】 史上最为详细的python学习笔记,记录学习过程的知识点和难点

# 字符串:
s1 = 'abc'          # 常量赋值,s1, s2, s3的内容和地址都相同
s2 = "abc"
s3 = '''abc'''      # 三引号的内容在同一行,字符串s3的内存空间和s1,s2相同
s4 = '''
abc
'''                 # 三引号的内容不在同一行,字符串s4的内空间前三者不同
print(id(s1), id(s2), id(s3), id(s4))
print(s1 == s2)     # 比较的是内容
print(s1 is s2)     # 比较的是地址

print(s2 == s3)
print(s2 is s3)

print(s3 == s4)
print(s3 is s4)

print(s3)   # 字符串abc的后面有换行符
print(s4)   # 字符串abc前面和后面都有换行符\n

print('-' * 20)     # 分割线

s1 = input('请输入abc')
s2 = input('请输入abc')

print(s1 == s2)     # True
print(s1 is s2)     # False     # 非常量赋值,input函数输入底层做了处理,所以最后的内容相同,但地址不同

 

print()

 

# 字符串运算符:+*
s3 = s1 + s2    # +号相当于字符串拼接符
s4 = s1 * 5     # *号相当于重复输出多次
print(s3)
print(s4)

# in ...里面
name = 'steven'
result = 'eve' in name      # 返回值是布尔类型 True False
print(result)

# not in 没有在...里面
result = 'tv' not in name   # 返回值是布尔类型 True False
print(result)

# % 字符串格式化输出符
print('%s说:大家好好学习!' % name)
print('%s说:%s' % (name, '大家好好学习!'))

# r 保留原格式输出,遇到转义符\不进行转义
print('%s说:\t哈哈哈!\'' % name)     # 进行转义
print(r'%s说:\t哈哈哈!\' ' % name)   # 没有转义,保留原格式输出,r后不能加空格

print()

截取字符串[start : end : step]

'''
[]  [start : end] [start : end: step]   作用:截取字符串
'''


filename = 'picture.png'

# [] 位置都是从0开始,位置也可以称作下标或索引
print(filename[1])
print(filename[3])      # 可通过[]结合位置获取特定字符

# [start : end] 类似于range(1, 10),包前不包后,即1 - 9,数学上表示为[1, 10)
print(filename[ : ])        # startend为空,表示正序输出
print(filename[0 : 7])      # 截取字符picture
print(filename[7 : 11])     # 截取字.png

# [start : end]的省略用法
print(filename[3 : ])       # 省略end,表示从start一直截取到字符串末尾
print(filename[  : 7])      # 省略start,表示从开头开始截取end

# [start : end]负数用法
print(filename[8 : -1])     # 不包括-1
print(filename[  : -2])      # 不包括-2
print(filename[-2 : ])
print(filename[-5 : -1])

print('-' * 20)

# [start : end : step]的倒序用法

'''
str[start : end : 方向和步长]
    方向:
        1表示从左向右:0, 1, 2, 3, 4, 5, ...
        -1表示从右向左:5, 4, 3, 2, 1, 0 ...
    
    注意数值的逆序
    比如:
        正向:5 : 0就不行了
        反向:5 : 0就可以取到值
'''

str1 = 'helloworld'
# 步长为1
print(str1[ : : 1])         # step1表示正序输出
print(str1[ : : -1])        # step-1表示倒序输出

print(str1[-5 : -1])        # 正序使用负数值为worl
print(str1[-1 : -5 : -1])   # 倒序使用负数值为dlro
print('---->', str1[0 : 5 : -1])     # 值为空
print(str1[5 : 0 : -1])     # 值为wolle
print('---->', str1[5 : 0 : 1])      # 值为空
# 步长为3
print(str1[::3])    # 0开始取值
print(str1[::-3])   # -1开始取值
print('-' * 20)

'''
小练习:hello world
    1、逆序输出world ----> dlrow
    2、正向输出hello
    3、逆序输出整个hello world ----> dlrow olleh
    4、打印oll
    5、打印llo wo
'''
s1 = 'hello world'
# 1、逆序输出world ---> dlrow
print(s1[-1 : -6 : -1])

# 等价于

print(s1[10 : 5 : -1])

print('1--- ^')

'''
总结:
    逆序输出时,startend有正数和负数两种取值方法,
    但都是大的数在前,小的数在后,如-1-6大,105
'''


# 2、正向输入出hello
print(s1[ : 5])             # print(s1[ : 5 : 1]),不推荐

print('2--- ^')


# 3、逆序输出整个hello world ---> dlrow olleh
print(s1[ : : -1])

print(s1[-1 : :-1])

print('3--- ^')


# 4、打印oll
print(s1[4 : 1 : -1])
# 等价于
print(s1[-7 : -10 : -1])

print('4--- ^')


# 5、打印llo wo
print(s1[2 : -3])       # 正负数结合使用,更简洁,不用一个一个数数字了,
# 等价于
print(s1[2 : 8])        # 比较麻烦
# 等价于
print(s1[-9 : -3])      # 比较麻烦

print('5--- ^')

python的字符串函数(内建)

字符串方法是从python1.6到2.0慢慢加进来的——它们也被加到了Jython中。

这些方法实现了string模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode的支持,有一些甚至是专门用于Unicode的。

str = "this is a string example...Wow!!!";

str1 = "这是一个字符串样例...哇哦!!!";

str2 = "start\tend";

str3 = "abc123";

str4 = "abcdef";

str5 = "123456";

str6 = "    abc\t"; # abc前后都是一个空格和一个tab

str7 = "www.baidu.com";

str8 = "ab c\n\nde fg\rkl\r\n";

序号

方法及描述

1

string.capitalize()

把字符串的第一个字符大写其他所有字符小写如果开头是空格会怎样?测试一下

print(str.capitalize())

This is a string example...wow!!!

2

string.center(width[, fillchar])   # fillchar:填充字符

返回一个原字符串居中,并使用空格填充至长度 width 的新字符串

print(str.center(50, '#'))

########this is a string example...Wow!!!#########

3

string.count(sub_str, beg=0, end=len(string))

返回 sub_str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 sub_str 出现的次数

print(str.count('s'))

3

print(str.count('s', 5, 7))

1

4

string.decode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式解码 string,如果出错默认报一个 ValueError 的 异 常 , 除非 errors 指 定 的 是 'ignore' 或 者'replace'

str = str.encode('utf-8', 'strict')

print(str)

this is a string example...Wow!!!

str1 = str1.decode('UTF-8', 'strict')

print(str1)

这是一个字符串样例...哇哦!!!

5

string.encode(encoding='UTF-8', errors='strict')

以 encoding 指定的编码格式编码 string,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace'

str = str.encode('utf-8', 'strict')

print(str)

b'this is a string example...Wow!!!'

str1 = str1.encode('utf-8', 'strict')

print(str1)

b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2\xe6\xa0\xb7\xe4\xbe\x8b...\xe5\x93\x87\xe5\x93\xa6\xef\xbc\x81\xef\xbc\x81\xef\xbc\x81'

6

string.endswith(suffix, beg=0, end=len(string))  # 下标从0开始,包前不包后

检查字符串是否以 suffix结束,如果beg 或者 end 指定则检查指定的范围内是否以 suffix 结束,如果是,返回 True,否则返回 False.

print(str.endswith('!!!'))

True

print(str.endswith('!!!', 0, len(str)))

True

7

string.expandtabs(tabsize=8)

expandtabs() 方法把字符串中的 tab 符号 \t 转为空格,tab 符号 \t 默认的空格数是 8,在第 0、8、16...等处给出制表符位置,如果当前位置到开始位置或上一个制表符位置的字符数不足 8 的倍数则以空格代替。

print(str2.expandtabs(20))

start               end

print(str2.expandtabs(tabsize = 30))

start                         end

8

string.find(str, beg=0, end=len(string))

检测 str 是否包含在 string 中,如果使用 beg 和 end 指定范围,则检查是否包含在指定范围内,如果在范围内,返回开始的索引值,否则返回-1

print(str.find('string'))

10

9

string.format()

格式化字符串format 函数可以接收不限个参数,位置可以不按顺序。

print('{}'.format(str))

this is a string example...Wow!!!

10

string.index(str, beg=0, end=len(string))

跟find()方法一样,只不过如果str不在 string中会报一个异常.

print(str.index('string'))

10

print(str.index('strings'))

ValueError: substring not found

11

string.isalnum()

如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False

print(str.isalnum())

False

print(str3.isalnum())

True

12

string.isalpha()

如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False

print(str.isalpha())

False

print(str4.isalpha())

True

13

string.isdecimal()

如果 string 只包含十进制数字则返回 True 否则返回 False.

print(str3.isdecimal())

False

print(str5.isdecimal())

True

14

href="https://www.runoob.com/python/att-string-isdigit.html" string.isdigit()

如果 string 只包含数字则返回 True 否则返回 False.。。相当于isnumeric()

提示

1、如果input输入的是负数,则该函数的返回值为False;

2、input输入的是str类型,进行数学运算需要强转为int

print(str5.isdigit())

True

15

string.islower()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False

print(str.islower())

False

print(str4.islower())

True

16

string.isnumeric()

如果 string 中只包含数字字符,则返回 True,否则返回 False相当于isdigit()

print(str5.isnumeric())

True

17

string.isspace()

如果 string 中只包含空格,则返回 True,否则返回 False.

18

string.istitle()

如果 string 是标题化的(见 title())则返回 True,否则返回 False

str = str.istitle()

False

str = str.title()

print(str)

This Is A String Example...Wow!!!

print(str.istitle())

True

19

string.isupper()

如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

str = str.upper()

print(str)

THIS IS A STRING EXAMPLE...WOW!!!

print(str.isupper())

True

20

string.join(seq)

以 string 作为分隔符,将 seq(sequence) 中所有的元素(的字符串表示)合并为一个新的字符串

str = '-'.join(str)

print(str)

t-h-i-s- -i-s- -a- -s-t-r-i-n-g- -e-x-a-m-p-l-e-.-.-.-W-o-w-!-!-!

21

string.ljust(width[, fillchar])

返回一个原字符串左对齐,并使用fillchar若省略则默认为空格填充至长度 width 的新字符串

print(str2.ljust(20))

start end           

print(str2.ljust(20, '0'))

start end00000000000

22

string.lower()

转换 string 中所有大写字符为小写.

str = str.upper()

print(str)

print(str.lower())

this is a string example...wow!!!

23

string.lstrip()

截掉 string 字符串左边的空格tab

print(str6.lstrip())

abc     

24

string.maketrans(intab, outtab])

maketrans() 方法用于创建字符映射的转换表,对于接收两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。

25

max(str)

返回字符串 str 中最大的字母。

print(str4)

abcdef

print(max(str4))

f

26

min(str)

返回字符串 str 中最小的字母。

print(min(str4))

a

27

string.partition(str)

有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string.

print(str7.partition('.'))

('www', '.', 'baidu.com')

print(str7.partition('#'))

('www.baidu.com', '', '')

28

string.replace(str1, str2,  num=string.count(str1))

把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次.

print(str.replace('i', '1'))

th1s 1s a str1ng example...Wow!!!

print(str.replace('i', '1', 1))

th1s is a string example...Wow!!!

29

string.rfind(str, beg=0,end=len(string))

类似于 find()函数,不过是从右边开始查找.

print(str.rfind('s'))

10

30

string.rindex(str, beg=0,end=len(string))

类似于 index(),不过是从右边开始.

print(str.rindex('s'))

10

print(str.rindex('ss'))

ValueError: substring not found

31

string.rjust(width)

返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串

print(str2.rjust(20))

           start end

32

string.rpartition(str)

类似于 partition()函数,不过是从右边开始查找

print(str7.rpartition('.'))

('www.baidu', '.', 'com')

print(str7.rpartition('#'))

('', '', 'www.baidu.com')

33

string.rstrip()

删除 string 字符串右边的空格tab

print(str6.rstrip())

    abc

34

string.split(str="", num=string.count(str))

以 str 为分隔符切片 string返回一个列表,如果 num 有指定值,则仅分隔 num 个子字符串

print(str.split(' '))

['this', 'is', 'a', 'string', 'example...Wow!!!']

print(str.split(' ', 2))

['this', 'is', 'a string example...Wow!!!']

35

string.splitlines([keepends])

按照行('\r', '\r\n', '\n')分隔,返回一个包含各行作为元素的列表,如果默认参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。

print(str8.splitlines())

['ab c', '', 'de fg', 'kl']

print(str8.splitlines(True))

['ab c\n', '\n', 'de fg\r', 'kl\r\n']

36

string.startswith(obj, beg=0,end=len(string))

检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查.

print(str7.startswith('www'))

True

37

string.strip([chars])

在 string 上执行 lstrip()和 rstrip()

print(str6.strip())

abc

38

string.swapcase()

翻转 string 中的大小写

print(str.swapcase())

THIS IS A STRING EXAMPLE...wOW!!!

39

string.title()

返回"标题化"的 string,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle())

print(str.title())

This Is A String Example...Wow!!!

40

string.translate(str, del="")

根据 str 给出的表(包含 256 个字符)转换 string 的字符,

要过滤掉的字符放到 del 参数中需结合maketrans()函数使用

41

string.upper()

转换 string 中的小写字母为大写

print(str4.upper())

ABCDEF

42

string.zfill(width)

返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0

print(str4.zfill(8))

00abcdef

print(str5.zfill(8))

00123456

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。