7. Python3教程丨丛林里的野蛮生长:无处不在的字符串(一)

7. 字符串

7.1 定义与创建

字符串就是Python中的路人脸,它看起来非常普通也是python中最常见的数据类型。但也正是字符串无处不在的原因,让它具有极强的适应能力与包容性:哪儿都有它,它也能为了适应环境拥有多副面孔。

他的无处不在是环境的需要,因此他的创建也要足够简单干脆,把他装进一对引号 ‘’ 或 “” 中,然后赋给一个变量名就好:

# 他可以在单引号中成长:
>>> name1 = 'Think'

# 他也可以在双引号下出现:
>>> name2 = "About"

7.2 访问

7.2.1 普通访问

字符串内部存在两套索引,正向索引从0开始每次递增1、反向索引倒着从-1开始每次递减1。我们可以用 变量[索引] 的方式访问:

>>> a = 'Think'
>>> a[3]
'n'

我们还可以用 变量[索引:索引] 的方式来访问,此时记得采取 用 左闭右开 的原则。例如 用 变量[m:n] 即是以索引为m的字符开始截取,截取到索引为n-1的字符:

>>> a = 'Think'
>>> a[1:3]
'hi'

如果从第一个索引开始截取我们可以省略到引号前面的部分,用 变量[:索引] 的方式:

>>> a = 'Think'
>>> a[:2]
'Th'

如果截取到最后一个我们可以省略掉引号后面的部分,用 变量[索引:] 的方式:

>>> a = 'Think'
>>> a[3:]
'nk'

如果截取全部也可以省略掉冒号两边的数字,用 变量[:] 来访问:

>>> a = 'Think'
>>> a[:]
'Think'

为了便于理解,可以见图:
在这里插入图片描述

7.2.2 寻找特殊信息

7.2.2.A 查看字符串长度

我们也可以用一些方式来查看字符串的一些特殊信息,例如用 len(变量名) 查看字符串的长度:

>>> a = 'Think'
>>> len(a)
5
7.2.2.B 查看字符串极值

还可以用 max(变量名) 查看字符串中的最大值,或者用 min(变量名) 查看字符串中的最小值等:

>>> a = '3579'

# 查看最大值
>>> max(a)
9

#查看最小值
>>> min(a)
3

Ⅰ. 当字符串内容为数字或者英文时:

我们发现当字符串内都是整型数字时,即按照数字大小作为规则。当然也可以对英文字母排序,例如:

>>> a = 'abcdef'

# 查看最大值
>>> max(a)
'f'

#查看最小值
>>> min(a)
'a'

Ⅱ. 当字符串内容为汉字时:

但是当字符串内容为汉字的时候,排序起来就比较麻烦了。网上关于爬虫汉字排序的有不少文章,有人说是按照id值,有人说按照拼音首字母。某些情况下可能确实会出现这样的现象,但是当你对足够多的字符串进行测试后就会发现这个“规律”不是特定的,例如下面这个例题:

>>> a = '你好啊'

# 看一下max和min
>>> max(a); min(a)
'好'
'你'

'''
发现最大值是'好',最小值是'你'。
而A<H<N,所以显然不可能是按照首字母排序。
'''

# 我们再看一下a内三个字符串的id以及三个字本身的id
>>> id(a[0]);id(a[1]);id(a[2])
3099049834736
3099049834496
3099049834496
>>> id('你');id('好');id('啊')
3099049834496
3099049834736
3099052672544

#这时我们知道,盛传的“按首字母”和“按id”显然是错误的了。

那究竟是按照什么呢?其实在计算机中汉字排序本身是没有统一的规则的,这和最初计算机对汉字的编码有关系。我能力不够就不打肿脸充胖子了,这里有一篇关于Python汉字排序的文章很好,如果真的感兴趣可以了解一下:

http://gerry.lamost.org/blog/?p=338&from=timeline

Ⅲ. 当字符串英文数字混合时:

还要注意一点是,如果某个字符串中同时出现了字母和整型数字的话,Python默认字母大于数字,基于这个原则再进一步判断。我们可以先用最大的单位整型数字 9 和字母表判断一遍大小验证这个原则:

>>> a = '9'
>>> import string # 调用内部模块 string,这个模块内有很多内容我们可以直接用
>>> for i in string.ascii_lowercase: # 把26个字母赋给 i ,再依次判断它们是否大于a的值9:
···       print(i>a)
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True
True

我们看到返回了26个 True ,就说明26个字母中每个字母都比最大的单位整型数字 9 大。

对于刚才遍历26个字母的过程,已经会至少一种方式的可以直接跳过下面这段,对上述代码还有疑惑的可以看这段详细解释:

刚才我在遍历26个字母的时候,用了这样的方式:
import string
for i in string.ascii_lowercase:
第一行:其中 import … 是调用某个模块的方式,我们在这里调用的是 string 这个内置模块,用它可以直接调用很多常用字符串
第二行前半句:其中 for 目标 in 模块 是将某个模块下的内容赋给 i 用的,可以将 for … 理解为“给…”。所以 for i in string 的意思为:调用string模块给i
第二行后半句:我们不需要把整个string模块都给i,只需要把小写字母给他就行了。而小写字母从目录上属于ASCII码,所以我们首先要用 for 目标 in 模块.模块下二级目录_模块下三级目录 的方式让这个调用更精确。所以 string.ascii_lowercase 的意思为:将string模块下ASCII码中的lowercase(小写字母)全部赋值给i。
这样,a~z就都成功给i了。

我们再看一个例子:

>>> a = 'Think25'
>>> max(a); min(a)
'n'
'2'

当字母与数字混合的条件下寻找最大值时,因为数字默认比字母小,所以会略过数字直接在字母中寻找排序最往后的就是最大值。而当寻找最小值时,也会略过字母直接在数字中寻找最小值。

7.2.3 简单查找

我们可以用 ‘内容’ in 变量名 ‘内容’ not in 变量名 对字符串内是否存在某个内容进行检索。关于这个用法有两个注意要点:

  1. 一次可以检查多个连续的内容
  2. 检索时要区分大小写

关于这两个特点,我们通过例题来感受:

>>> a = 'Think'
>>> 'h' in a
True
>>> 'in' in a
True
>>> 't' in a
False

通过观察上面的例题我们发现 ‘in’ 可以被检索到,即可得知特点1:一次可以检查多个连续的内容

同时 ‘t’ 检索不到,所以得知特点2:检索时区分大小写

7.2.4 特定检查

7.2.4.A 检查内容索引

Ⅰ. 从左边开始检索:

我们不仅仅可以检查字符串中是否包含某个内容,我们还可以用 变量名.find(内容) 变量名.index(内容) 来检查具体内容的索引。这两种用法一共有三个特点需要注意:</

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值