7.1、基本数据类型之字符串

一、str-字符串类型

作用:用于名字,性别,国籍,地址等描述信息
定义:在单引号\双引号\三引号内包含一串字符
字符串总结:存一个值,有序,不可变

name = 'poco'

字符串类型的转化

i = str([1, 2, 3])  # 把列表转化为字符串
print(type(i))

v = str({'name': "poco", 'age': 18})  # 把字典转化为字符串
print(type(v))

二、优先掌握的操作

先定义一个字符串

name = 'my name is Poco'

1、按索引取值

# 正向取(从左往右)
print(name[11])  # 我想取大写的P,取P对应的11号索引

# 反向取(负号表示从右往左,第一个索引为-1)
print(name[-4])

2、切片

截取某一段内容,(顾头不顾尾,步长)

# 需求:取Poco这个单词
print(name[11:15])  

# 步长:第三个参数2代表步长,表示只取0,2,4...14
print(name[0:15:2])

# 反向切片
print(name[::-1])  # -1表示从右往左依次取值

3、长度len

获取字符串的长度,即字符的个数,但凡存在于引号内的都算作字符,包括空格

print(len(name))

4、成员运算 in 和 not in

print('Poco' in name)  # 判断Poco是否在name里面
print('Poco' not in name)  # 判断Poco是否不再name里面

5、strip移除字符

移除字符串首尾指定的字符,默认移除空格,无法移除不在首尾的字符

gender = '   male    '
gender = gender.strip()
print(gender)

name = '@@@poco@@@'
name = name.strip('@')
print(name)

# strip移除进阶(lstrip, rstrip)
print(name.lstrip('@'))  # 只移除左边的指定字符
print(name.rstrip('@'))  # 只移除右边的指定字符

6、切分split

将字符串的内容按照指定的字符切割,如果不指定字符,默认以空格作为切分符号

1、得到的结果是列表数据类型,

2、指定切割的字符不保留

str1 = 'hello world'
str2 = str1.split()
print(str2)
# 运行结果
['hello', 'world']

game1 = '4399|7k7k|2077|GTA5'
game2 = game1.split('|')  # 括号内指定分隔字符,则按照括号内指定的字符切割字符串
print(game2)
# 运行结果
['4399', '7k7k', '2077', 'GTA5']

# split切分进阶(rsplit)
print(game1.rsplit("|", 2))  # 从右往左切割,可以指定切割次数
# 运行结果
['4399|7k7k', '2077', 'GTA5']

7、循环

hi = '今天你好吗?'
for line in hi:  # 依次取出字符串中每一个字符
    print(line)

三、需要掌握的操作

1、大小写转换 lower,upper

str1 = 'My nAme is tonY!'
print(str1.lower())  # 将英文字符串全部变小写
print(str1.upper())  # 将英文字符串全部变大写

2、判断开头结尾 startswith,endswith

# 先定义一个字符串
str2 = 'tony jam'

# startswith()判断字符串是否以括号内指定的字符开头,结果为布尔值True或False
str2.startswith('t')
# 运行结果
True

# endswith()判断字符串是否以括号内指定的字符结尾,结果为布尔值True或False
str2.endswith('jam')
# 运行结果
True

3、格式化输出format

在之前,我们使用%s来做字符串的格式化输出操作,这种方法在传值时,必须严格按照位置与%s一一对应

print('我的名字是%s,我的年龄是%s' %('poco', 22))

而字符串的内置方法format则提供了一种不依赖位置的传值方式

print('我的名字是{name},我的年龄是{age}'.format(name='poco', age=22))
# 指名道姓取值

print('我的名字是{},{}'.format('poco',22))  
# 类似于%s的用法,按位置与{}一一对应

print('我的名字是{0},我的年龄是{1}'.format('poco',22))  
# 把format传入的多个值当作一个列表,然后用{索引}取值

4、join拼接字符串

从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串)

print("*".join('枯藤老树昏鸦'))
# 运行结果
枯*藤*老*树*昏*鸦

5、replace替换字符串

用新的字符替换字符串中旧的字符

msg = "my name is tony, my age is 18!"
msg = msg.replace('tony', 'poco')
print(msg)

6、isdigit纯数字判断

判断字符串是否是纯数字组成,返回结果为True或False

id_card = '1234567'
print(id_card.isdigit())
# 运行结果
True

四、了解性质的操作

这些操作不常用,只需要大概记得就可以了,忘记就回来查

1、find查找索引

从指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则返回-1,

只要找到一个就会返回数据,不会再接着往下找了

msg = 'tony say hello'
print(msg.find('o', 1, 3))  # 1和3代表查询的索引范围
print(msg.rfind('o'))  # 可以从右往左找

2、index查找索引

同find,但在找不到时会报错

msg = 'tony say hello'
print(msg.index('o'))

3、count统计次数

统计字符串在大字符串中出现的次数

msg = "hello everyone"
print(msg.count('e'))  # 统计字符串e出现的次数
print(msg.count('e', 1, 6))  # 字符串e在索引1~5范围内出现的次数
# 运行结果
4
1

4、对齐center,ljust,rjust,zfill

name='tony'

print(name.center(30,'-'))  # 总宽度为30,字符串居中显示,不够用-填充
# -------------tony-------------

print(name.ljust(30,'*'))  # 总宽度为30,字符串左对齐显示,不够用*填充
# tony**************************

print(name.rjust(30,'*'))  # 总宽度为30,字符串右对齐显示,不够用*填充
# **************************tony

print(name.zfill(50))  # 总宽度为50,字符串右对齐显示,不够用0填充
# 0000000000000000000000000000000000000000000000tony

5、关于大小写 captalize,swapcase,title

# captalize:将字符串首字母变成大写
message = 'hello everyone nice to meet you!'
print(message.capitalize())
# 运行结果
Hello everyone nice to meet you!

# swapcase:将字符串的大小写翻转(大写变小写,小写变大写)
message1 = 'Hi girl, I want make friends with you!'
print(message1.swapcase())
# 运行结果
hI GIRL, i WANT MAKE FRIENDS WITH YOU!

# title:将每个单词的首字母变成大写
msg = 'dear my friend i miss you very much'
print(msg.title())
# 运行结果
Dear My Friend I Miss You Very Much

6、expandtabs

name = 'tony\thello'  # \t表示制表符(tab键)
print(name)

print(name.expandtabs(10))  # 修改\t制表符代表的空格数,改成10格

7、is数字系列

num1 = b'4' # bytes
num2 = u'4' # unicode,python3中无需加u就是unicode
num3 = '四' # 中文数字
num4 = 'Ⅳ' # 罗马数字

最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。

# 只能判断bytes和unicode类型
isdigit  

# 只能判断uncicode(bytes类型无isdecimal方法)
isdecimal  

# 可以判断unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
isnumberic  

# 以上三种类型均不能判断浮点数

8、is其他

name = 'tony123'

name.isalnum()  # 字符串中既可以包含数字也可以包含字母
True
name.isalpha()  # 字符串中只包含字母
False
name.isidentifier()
True
name.islower()  # 字符串是否是纯小写
True
name.isupper()  # 字符串是否是纯大写
False
name.isspace()  # 字符串是否全是空格
False
name.istitle()  # 字符串中的单词首字母是否都是大写
False
posted @ 2021-03-20 17:48  黑影Poco  阅读(141)  评论(0)    收藏  举报