下标、切片
早晨去上班,由于路上堵车,只能在公司楼下的超市买奥利奥吃~~
但是正在减肥,从左边数到右边一共6个【我也不知道是不是有6个】,你给所有的饼干都编号,左边开始【1,2,3。。。6】
-
下标
下标:即饼干的编号。
但是,程序中下标【索引】都是从0开始,也就是说程序中:饼干的编号是【0,1,2,3,4,5】
示意图:
饼干(个) | a | b | c | d | e | f |
---|---|---|---|---|---|---|
下标 | 0 | 1 | 2 | 3 | 4 | 5 |
想吃饼干的时候,从第一个开始拿就可以了。。。
当然,想吃哪个在哪个位置拿就可以了。。。
在程序中怎么取呢?
>>> str = "12345"
>>> print(str[0])
1
>>> print(str[1])
2
也就是说,我们程序中通过下标去获取所对应的字符
-
切片
但是,我不想吃第一个饼干,只想吃中间2,3位置的,我直接拿就可以了
程序中怎么实现呢?
>>> str = "12345"
>>> print(str[1:3:1])
23
>>>
切片的语法:[起始:结束:步长]
- 起始:从哪个位置开始
- 结束:想取哪个元素的位置+1
- 步长:是一个挨着一个还是隔一个取一个【默认为一个挨着一个】
注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。
代码示例:
>>> str ="12345"
>>> print(str[0:4:])
1234
>>> print(str[0:5:])
12345
>>> print(str[0:5:1])
12345
>>> print(str[0:5:2])
135
>>> print(str[0:5:3])
14
>>>
但是,我想了想,不从中间,也不从第一个开始,我从最后一个开始~
>>> str = '12345'
>>> print(str[::-1])
54321
>>>
吃了两个发现不能吃了,减肥~~
>>> print(str[:-3:-1])
54
>>>
代码示例:
>>> str = '12345'
>>> print(str[0:2]) # 取下标0、1的字符
12
>>> print(str[0:4]) # 取下标0~3的字符
1234
>>> print(str[1:]) # 取下标从1开始到最后的字符
2345
>>> print(str[1:-1]) # 取下标1开始到最后一个之间的字符
234
>>> print(str[::-1]) # 从最后一个开始取
54321
>>> print(str[-1:]) # 取最后一个
5
>>>
思考
怎么取出数字为432呢?
>>> str = '12345'
>>> print(str[-2:-5:-1])
432
>>>
字符串常见操作
-
find
本人比较随和,东西放的比较随心所欲,这就造成了找东西的时候找不到,很尬尴~~
那么,程序中,怎么在茫茫的abcd组合中找到想要的字符就是一个关键问题了~~
假设有字符串:word = "i am shuaige,everyone thinks so!"
>>> word = "i am shuaige,everyone thinks so" >>> word.find("shuaige") 5 >>> word.find("shuaige",6,len(word)) # len()查看字符串的长度 -1 >>>
-
上面的两段代码为什么返回的数字一个是5另一个是-1呢?!
- 检测 shuaige 是否包含在word中,如果是返回开始的索引值【空格也占一个字符】,否则返回-1
- 第一个find是在整个字符串中查找
- 第二个find是在下标为6的地方到字符串的结尾查找
-
-
index
跟find()方法一样,不过如果要找的字符串不在word中会报错~
>>> word = "i am shuaige,everyone thinks so" >>> word.index("shuaige") 5 >>> word.index("shuaige",6,len(word)) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: substring not found >>>
-
count
使用同find方法
>>> word = "i am shuaige,everyone thinks so" >>> word.count("o") 2 >>> word.index("o",6,len(word)) 18 >>> len(word) 31
-
replace【替换】
格式:
字符串.replace(要替换的字符,用哪个字符替换,替换不超过多少次【<=】)
>>> word = "i am shuaige,everyone thinks so" >>> word.replace("o","A",1) 'i am shuaige,everyAne thinks so' >>> # 如果不写次数,那么将会替换所有的字符 >>> word.replace("a","B") 'i Bm shuBige,everyone thinks so' >>>
-
split【切片】
格式:
split("切割符",[次数]) # []为可选参数
返回一个列表
>>> word = "i am shuaige,everyone thinks so" >>> word.split(" ") # 默认全部切分 ['i', 'am', 'shuaige,everyone', 'thinks', 'so'] >>> word.split(" ",2) # 指定切分次数 ['i', 'am', 'shuaige,everyone thinks so'] >>>
-
strip:删除字符串两端的空白字符
格式:word.strip([chars])
chars -- 移除字符串头尾指定的字符序列。
>>> word = ' i am shuaige,everyone thinks so! '# 注意这两端我特意加了N多空格 >>> word.strip(" ") 'i am shuaige,everyone thinks so!'
还有接近20个没有列出【不常用】,就不一一列出了!
思考
给定一个字符串,a = "abcdefg \t hijklmn \t opqrst uvwxyz" 返回使用\t或者空格分隔的倒数第二个字符串
a = "abcdefg \t hijklmn \t opqrst uvwxyz"
a.split()
# 切分之后结果如下
['abcdefg', 'hijklmn', 'opqrst', 'uvwxyz']
#取倒数第二个
a.split()[-2:-1]
# 返回结果如下
['opqrst']