Python中的字符串及一些字符串的方法

1. 字符串的定义

字符串是被引号包裹的文本(单双三引号都可以, 三引号可以保留格式,外层引号不能和字符串本身包含的引号重复)

字符串是不可变类型

str1 = 'hello world'
str2 = "I'm a student"
str3 = '''hello
		  world
		 '''
print(str3)

2. 字符串的基本操作

(1)字符串相加

字符串可以用 ‘+’ 连接

a = '1'
b = '2'
print(a + b)  # --> '12'

(2)索引(index)

从左边开始第一个字符索引是 ‘0’, 从右边开始第一个是 ‘-1’(负数索引),

索引越界会报错 —> IndexError : index out of range(索引超出范围)

str1 = 'hello world'
print(str1[0])  # --> 'h'
print(str1[1])  # --> 'e'
print(str1[-1]) # --> 'd'
print(str1[12]) # --> IndexError : str index out of range

(3)切片(sliced)

切片的索引有默认值, 省略开始索引时默认为0, 省略结束默认为到字符串的结束.

word = 'Python'
print(word[:2])  # --> 'Py'
print(word[2:])  # --> 'thon'

切片的开始总是被包括在结果中, 而结束不包括.(类似于前闭后开区间)

print(word[0:2])  # --> 'Py'
print(word[2:4])  # --> 'th'

使用过大的索引会报错, 但切片中的越界索引会被自动处理.

print(word[4:42])  # --> 'on'
print(word[42:])   # --> ''

(3.1)步长切

word = 'Python'
print(word[::2])    # --> 'Pto'  每两个切一个(或者说隔一个切一个)
print(word[1:4])    # --> 'yth'
print(word[1:4:2])  # --> 'yh'

(3.2)负步长

print(word[::-1])  # --> 'nohtyP'
# 用这种方法我们可以将一个字符串反转(注意不是改变字符串本身,而是可以得到一个新的返回值
print(word[::-2])  # --> 'nhy'

(4)相同的字符串在内存中是同一个内存地址(相当于常量池)

str1 = 'hello'
str2 = 'hello'
print(str1 is str2)   #  --> True
print(id(str1))       # 可以用内置函数id()来查看它们的内存地址,可以看到str1和str2的内存地址相同
print(id(str2))       # 因为每个人电脑出来的结果可能不一样,这里我就不写结果了
# 这里要提一下Python的创建机制,创建一个字符串变量时会为变量名开辟一块内存空间,字符串的值开辟一块内存空间,
# 将变量名指向值的内存地址 (有说的不对的地方大家多包涵,欢迎在下方评论区指出)
# 因为字符串是不可变类型,所以在创建一个相同的字符串时,不会再开辟一块内存,而是将新的变量名指向同一个内存地址

但是!!!我发现在字符串中加空格或者符号就不符合上述情况了, 具体原理我也不清楚…

str1 = 'hello world'
str2 = 'hello world'
print(str1 is str2)  # -->  False
print(id(str1))
print(id(str2))
# 莫非是字符串太长了?
str3 = 'helloworldhelloworld'
str4 = 'helloworldhelloworld'
print(str3 is str4)  # -->  True
# 好像不是长度的问题, 有知道的大佬请在评论区留言告知,感谢

3. 字符串的一些方法(函数)

语法: str.函数名() , 这里的点 ‘.’ 表示从属 ,
注意: 下列这些方法不会改变字符串本身, 而是返回一个新的值

(1)str.upper() 将字符串里的内容变成大写

str1 = 'Python'
str2 = str1.upper()
print(str2)  # -->  'PYTHON'

(2)str.lower() 将字符串里的内容变成小写

str1 = 'PYTHON'
str2 = str1.lower()
print(str2)  # -->  'python'

(3)str.isdecimal() 判断一个字符串能否转换成10进制的整数, 返回一个布尔值

print('55'.isdecimal())   # -->  True
print('55.5'.isdeciaml()) # -->  False

(4)str.isalnum() 判断字符串是否是数字(0-9#不包括浮点数)或者英文字母(A-Z a-z)的组合, 返回一个布尔值

#这里发现中文也会返回True

print('123abc'.isalnum())  # -->  True
print('123'.isalnum())     # -->  True
print('abc'.isalnum())     # -->  True
print('你好'.isalnum())     # -->  True
print('Hi,Tom'.isalnum())  # -->  False

(5)str.isalpha() 判断是否只是字母的组合, 返回一个布尔值, 同样中文也会返回True

print('abc'.isalpha())  # -->  True
print('a5'.isalpha())   # -->  False
print('你好'.isalpha())  # -->  True

(6)str.isdigit() 判断字符串是否是纯数字(#必须是整数), 同样返回布尔值

print('123'.isdigit())  # -->  True
print('2ab'.isdigit())  # -->  False

(7)str.capitalize() 字符串的首字母大写

str1 = 'abc'
print(str1.capitalize())  # --> Abc

(8)str.titel() 字符串中的每个单词首字母大写(#这里指的是分隔开的, 并不是说会自动检测单词拼写)

str1 = 'hello'
print(str1.title())  # -->  Hello
str2 = 'helloworld'
print(str2.title())  # --> Helloworld
str3 = 'hello world'
print(str3.title())  # --> Hello World
str4 = 'a b c'
print(str4.title())  # --> A B C

(9)str.strip() 默认去除字符串两边的空白(#也可以在括号中加上参数用来去除别的)

str1 = '  abc  '
print(str1.strip())  # --> 'abc'  这里为了表示没有空白我用引号引起来
str2 = 'abca'
print(str2.strip('a'))  # --> bc

(10)str.lstrip() 去除字符串左边的空白(#用法类似于strip)

(11)str.rstrip() 去除字符串右边的空白(#用法类似于strip)

(12)str.center(width:int, fillchar:str) 将字符串填充至给定的宽度, 并且原字符串居中

第一个参数width代表宽度,第二个参数fillchar代表用来填充的字符,# 如果不指定fillchar则默认用空格填充

str1 = 'a'
print(str1.center(5, '*'))  # -->  **a**
print(str1.center(5))       # -->    a   
print(str1.center(5, '-'))  # -->  --a--

(13)str.index(‘x’) 找到的左起第一个位置的索引, 找不到就报错

str1 = 'hello world'
print(str1.index('h'))  # --> 0
print(str1.index('l'))  # --> 2
print(str1.index('a'))  # --> ValueError: substring not found

(14)str.find(‘x’) 找到的左起第一个位置的索引, 找不到则返回 -1

str1 = 'hello world'
print(str1.find('h'))  # --> 0
print(str1.find('l'))  # --> 2
print(str1.find('a'))  # --> -1

(15) str.rfind(‘x’) 找到的右起第一个位置的索引(同样返回正索引值), 找不到则返回 -1

str1 = 'hello world'
print(str1.rfind('h'))  # --> 0
print(str1.rfind('d'))  # --> 10
print(str1.rfind('l'))  # --> 9
print(str1.rfind('a'))  # --> -1

(16) str.split() 切分字符串, 默认以空白来切分, 返回一个列表(列表中的元素是被切分后的一个一个字符串)

str1 = 'Python is best!'
print(str1.split())       # 以空白切分  --> ['Python', 'is', 'best!']
print(str1.split('b')     # 以字符b切分 --> ['Python is', 'est!']
print(str1.split(maxsplit=2,sep='t')) # --> ['Py', 'hon is bes', '!']
# maxsplit参数表示切分的次数, sep参数代表以什么字符来切, 切分后该字符会被去掉

(17) str.startswith(‘x’) 判断字符串是否以字符’x’开头, 返回一个布尔值

str1 = 'hello'
print(str1.starstwith('h'))  # --> True
print(str1.startswith('e'))  # --> False

(18) str.endswith(‘x’) 判断字符串是否以字符’x’结尾, 返回一个布尔值

str1 = 'hello'
print(str1.endswith('o'))  # --> True
print(str1.endswith('e'))  # --> False

(19) join() 容器中的每个元素用join前面的字符粘起来, 返回一个字符串

str1 = ' '.join('python')
print(str1)  # --> 'p y t h o n'
# 容器中的元素必须都是str
print(' '.join(['Python', 'is', 'best!']))  # --> 'Python is best!'
# join字典得到的是key(键)
print(' '.join({'name': 'Tom', 'age': 12})) # --> 'name age'

(20) str.replace(‘x’, ‘y’, n) 替换, 将字符串中的’x’替换为’y’, n代表替换次数

str1 = 'abcabcabc'
str2 = str1.replace('ab', '123', 2)
print(str2)  # --> '123c123cabc'
# 不传替换次数时, 默认全部替换
print(str1.replace('ab', '123'))  # --> '123c123c123c'

4. 字符串格式化

(1) format

# '_{}'.format(a)  --> a代替花括号的位置
# '_{},_{}'.format(a, b)  --> a,b代替花括号的位置
# '_{}'.format(a)  --> a代替花括号的位置
print('这是一个{}'.format('字符串'))  # --> 这是一个字符串
print('name:{},age:{}'.format('Tom', 10))  # --> name:Tom, age:10

(2) %d #decimal(十进位的)

# '_%d'%(a)  --> a代替%d的位置
# 这里a只能是数字(如果a是float, 会自动取整转为int, # 忽略小数点后的)
print('abc%d' % 1)       # --> abc1  (%后只有一个数字时, 可以不加括号)
print('abc%.2d' % 1)     # --> abc01  (这里 .2 表示占用两个位数, 不足补0)
print('abc%.2d' % 11)    # --> abc11
print('abc%.2d' % 111)   # --> abc111 (超出则忽略定义的位数)

(3) %f # float(也只能是数字)

print('只要%f元!' % 9.9)  # --> 只要9.900000元!  (不定义位数时, 小数点后默认补足6位)
print('只要%.2f元!' % 9.987)  # --> 只要10.00元! (%.2f表示小数点后保留两位, 四舍五入)

(4)%s # string(通常用来代替字符串, 用法同上, 也可以代替数字)

5. 转义字符

# 转义字符 '\' 反斜杠(也叫捺斜杠)
# '\'单独使用时是折叠符, 一般用在一行写不完另起一行时, 表示续行
# 转义指将有意义的变成->没意义的, 没意义的变成有意义的
# 字符串前加 r 代表字符串里的'\'不用来转义. r -> raw string(原始字符串)
# '\' 在遇到一些特定字符时会转义为特殊字符
# \n  --> 换行
# \v  --> 纵向制表符
# \t  --> 横向制表符
print('hello \nick')  # --> hello
                      #     ick
print(r'hello \nick') # --> hello nick
  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值