上一节简单介绍了python的几种数据类型,关于数值(数字)类相对比较简单,现在继续介绍等下的几种比较重要的数据类型.
讲字符串之前,简单介绍一下关于python3的编码问题.
一. 什么是编码
将明文转换为计算机可以识别的的编码文本称为“编码”, 反之从计算机可识别的编码文本转回明文为“解码”
-
计算机上的数据都是以二进制的形式存储的,1个字节(8比特)可以表示256种状态,英文只有26个字符,再加上一些特殊字符,使用128个就够了,计算机就可以使用127个不同字节来存储英语文字,这就是ASCII编码
-
计算机进入中国后,无法显示中文,一个自己已经被占满了,我国重新制定了一个编码表,将扩展的第八位对应的拉丁文全部删掉,规定一个小于127的字符与原来的意义相同,当两个大于127的字符链接在一起的时候,就表示一个汉字,前面一个字节为高字节(0xA1-0xF7),后面一个字节为低字节(0xA1-0xFE),这样可以表示7000多个汉字,这种编码叫做GB2312。GB2312是对ASCII的中文扩展
-
由于汉字的数量太大,GB2312不能满足需求,后来规定只要第一个字节大于127就固定表示一个汉字,不管后面的是不是扩展字符集里面的内容,扩展后的编码成为GBK, GBK包括了GB2312的所有内容,同时增加了近20000个新的汉字(包括繁体)和符号
-
在Unicode出现之前,每个国家都搞自己的编码,彼此之间互不支持,带来很多麻烦,国际标标准组织提出来一个统一的编码标准:Unicode
Unicode用两个字符来表示一个字符,可以提供65535种字符,足够覆盖世界上的所有符号
- Unicode的出现,提供了统一的标准,但对于英文世界的国家来说,一个字节完全够用,如果使用Unicode会浪费大量空间,为了解决这个问题提出了utf-8,一种针对Unicode的可变长度字符编码,可以使用1-4个字节表示一个符号,根据不同的符号变化字节长度,当字符在ASCII编码范围时,用一个字节表示,兼用ASCII。
使用这样的编码的好处是,虽然内存汇总的数据都是Unicode,但当数据保存到磁盘或者用于网络传输时,使用utf-8会节省更多的流量和硬盘空间。
Unicode和utf-8的关系:Unicode是内存编码表示方案(规范),而utf-8是如何保存和传输Unicode的方案(实现)
然后python3的python2的区别就是全面兼容Unicode,已经不用担心中文编码问题
- 如下定义的变量a,存储的是数字类型的值
a = 100
如下定义的变量b,存储的是字符串类型的值字符串输出
b = "hello www.wolfcode.cn" 或者 b = 'hello www.wolfcode.cn'
双引号或者单引号中的数据,就是字符串
-
字符串输入
input获取的数据,都以字符串的方式进行保存,即使输入的是数字,那么也是以字符串方式保存
userName = input('请输入用户名:') print("用户名为:%s"%userName) password = input('请输入密码:') print("密码为:%s"%password)
结果:(根据输入的不同结果也不同)
请输入用户名:wolfcode 用户名为: wolfcode 请输入密码:kuailedabenyingtiantianhaoxinqing 密码为: kuailedabenyingtiantianhaoxinqing
-
所谓“下标”,就是编号,就好比超市中的存储柜的编号,通过这个编号就能找到相应的存储空间
如果想取出部分字符,那么可以通过下标的方法.
w o l f c o d e
0 1 2 3 4 5 6 7
```python
In [1]: str1 = “wolfcode”
In [2]: str1[0]
Out[2]: ‘w’
In [3]: str1[1]
Out[3]: ‘o’
In [4]: str1[3]
Out[4]: ‘f’
- ##字符串的切片
切片是指对操作的对象截取其中一部分的操作。**字符串、列表、元组**都支持切片操作。
>切片的语法:[起始:结束:步长]
**注意:选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)。**
我们以字符串为例讲解。
如果取出一部分,则可以在中括号[]中,使用:
name = 'abcdef'
print(name[0:3]) # 取 下标0~2 的字符
![image.png](https://upload-images.jianshu.io/upload_images/4151356-e50675bc982fbb1c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
name = 'abcdef'
print(name[0:5]) # 取 下标为0~4 的字符
![image.png](https://upload-images.jianshu.io/upload_images/4151356-8e240c51e72c490c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
name = 'abcdef'
print(name[3:5]) # 取 下标为3、4 的字符
![image.png](https://upload-images.jianshu.io/upload_images/4151356-d3c9c2fda520a611.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
name = 'abcdef'
print(name[2:]) # 取 下标为2开始到最后的字符
![image.png](https://upload-images.jianshu.io/upload_images/4151356-ee988d35a5758742.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
name = 'abcdef'
print(name[1:-1]) # 取 下标为1开始 到 最后第2个 之间的字符
![image.png](https://upload-images.jianshu.io/upload_images/4151356-d0c27f98fbb14d82.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
a = “abcdef”
a[:3]
‘abc’
a[::2]
‘ace’
a[5:1:2]
‘’
a[1:5:2]
‘bd’
a[::-2]
‘fdb’
a[5:1:-2]
‘fd’
- 字符串常见操作
1. find(str) :检测str是否包含在mystr中,是返回开始的索引值,否返回-1;
完整结构:mystr.find(str,start = 0, end=len(mystr)) str代表搜索的字符,start代表搜索的起>始位置,end代表搜索的结束位置(请注意不是长度,是下标)
mystr = ‘hello world python wocast I and you wocastcpp’
print(mystr.find(‘wo’))#display 19, return 从左至右第一次出现的字符的下标
print(mystr.find(“wo”, 22,200))#display 36
print(mystr.find(“wo”, 22,24))#display -1 在指定范围内没有找到字符串则返回-1
2. index()
跟find()方法一样,只是如果str不在会报一个异常
3. rfind()和find()类似,只是从右边开始找
4. rindex()方法和index()方法类似,只是从右边开始找
5. count(str):返回str出现的次数
完整结构: mystr.count(str,start = 0, end=len(mystr)) 返回str在star和end之间出现的次数
mystr = ‘hello world python wocast I and you wocastcpp’
print(mystr.count(‘it’))#display 2
6. mystr.replace(str1,str2, mystr.count(str1)) 把mystr中的str1替换成str2,如果count指定,则替换不超过count次
mystr = ‘hello world python wocast I and you wocastcpp’
print(mystr.replace(‘wo’,’WO’)) #”display hello world python WOcast I and you WOcastcpp”
注意:此时只要没有重新给mystr赋值,则mystr并不改变。
7. mystr.split("切割字符",切割几次) 如果切割字符和切割几次不设置,默认以空格切割,切割全部
mystr = ‘hello world python wolfcode I and you wolfcode’
print(mystr.split())#display [‘hello’, ‘world’, ‘python’, ‘wolfcode’, ‘I’, ‘and’, ‘you’, ‘wolfcode’]
print(mystr.split(“o”,2))#display [‘hell’, ‘ w’, ‘rld python wolfcode I and you wolfcode’]
8. capitalize() 把字符串的第一个字符大写
mystr = ‘hello world python’
print(mystr.capitalize())#diplay Hello world python
9. title() 把字符串的每个单词首字母大写
mystr = ‘hello world python’
print(mystr.title())#display Hello World Python
10. lower() 把字符串的每个字符小写
11. upper() 把字符串的每个字符大写
12. startswith(obj) 检查字符串是否以obj开头,是则返回True,否则返回False
mystr = ‘hello world python’
print(mystr.startswith(“hello”))#display True
print(mystr.startswith(“Hello”))#display False
```