Python的数据类型及编码
一、数据类型
数字(整形、长整型、浮点型、复数)
字符串
列表
元组
字典
集合
字节串
二、数据类型的总结
每个数据类型所占存储空间的大小是不一样的(从低到高)
数字
字符串
集合:无序,无序存储索引相关信息
元组:有序,有序存储索引相关信息,不可变
列表:有序,有序存储索引相关信息,可变,需要处理数据的增删改查
字典:无序,需要存储key与value映射的相关信息,可变,需要处理数据的增删改查
按可不可变来区分:
可变是指修改数据类型后,他所在的内存空间是否发生变化。
列表、字典为不可变类型。数字、字符、元组为不可变类型
三、数字
python支持int(整数)、float(浮点型)、bool(布尔型)、complex(复数)
生成一个数字类型
x = 9
实际上生成一个数字类型的操作是这样
x = int(9)
其他的同理
四、字符串
name = "abdefg"
在Python中我们关注的事它的切片操作
>>> name[0:3]
abc'
在取索引值的时候,我们从0开始到2.有头无尾
在反向取值的时候从-1开始
>>> name[-1]
'g'
还可以这样
>>> name[0:6:2]
'ace'
从0开始到6步长为2
移除空白strip,主要是移除字符转两边的空白格
>>> name = " abcdefg "
>>> name.strip()
'abcdefg'
切分split
>>> name.split("d")
[' abc', 'efg ']
以d分为一个列表。
字符串的内建函数
五、列表
序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。
序列都可以进行的操作包括索引,切片,加,乘,检查成员。
此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
列表是最常用的Python数据类型,它可以作为一个方括号内的逗号分隔值出现。
列表的数据项不需要具有相同的类型
创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
list1 = ['Google', 'Runoob', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print ("list1[0]: ", list1[0])
print ("list2[1:5]: ", list2[1:5])
list1[0]: Google
list2[1:5]: [2, 3, 4, 5]
list = ['Google', 'Runoob', 1997, 2000]
print ("第三个元素为 : ", list[2]) list[2] = 2001
print ("更新后的第三个元素为 : ", list[2])
第三个元素为 : 1997
更新后的第三个元素为 : 2001
list = ['Google', 'Runoob', 1997, 2000]
print (list) del list[2]
print ("删除第三个元素 : ", list)
列表函数和方法
六、字典
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
访问字典里的值
dict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
print ("dict['Name']: ", dict['Name'])
print ("dict['Age']: ", dict['Age'])
字典的值和方法
七、元组
元组(tuple)是一种静态的(immutable)或者说是不可变(unchangeable)的数据结构,里面的元素按照一定的顺序排列。它是静态的,所以元组里的元素不能被修改。
元组用于给数据分组。元组中的每一个元素称之为“项”(item)。
元组中的值被包装在括号中,并用逗号分隔,空元组可以写成coral=(),不过只有一项元素的元组必须使用逗号:coral = ('blue coral',)。
如果使用print()函数打印元组,会得到如下的输出,其中元组依然‘()’用括号包裹。
元组的不能增删改,只能以索引的方式获取。
八、集合
>>> s = {1,2.3,'a'}
>>> L1 = [1,1,2,4,3]
>>> T1 = (2,4,6,6,6,7)
>>> s = {1}
>>> type(s)
<class 'set'>
>>> s = set(L1) #从列表到集合
>>> s
{1, 2, 3, 4}
>>> s = set(T1) #从tuple到set
>>> s
{2, 4, 6, 7}
set 基本函数与操作:
s.add( x ) 将元素 x 添加到集合s中,若重复则不进行任何操作
>>> s = {1,2,'a'}
>>> s.add('b')
>>> s
{1, 'a', 2, 'b'}
>>> s.add(1)
>>> s
{1, 'a', 2, 'b'}
s.update( x ) 将集合 x 并入原集合s中,x 还可以是列表,元组,字典等,x 可以有多个,用逗号分开
>>> s
{1, 'a', 2, 'b'}
>>> s.update({1,3})
>>> s
{1, 'a', 3, 'b', 2}
>>> s.update([1,4])
>>> s
{1, 'a', 3, 4, 'b', 2}
>>> s.update(1)
Traceback (most recent call last):
File "<pyshell#264>", line 1, in <module>
s.update(1)
TypeError: 'int' object is not iterable
s.discard( x )将 x 从集合s中移除,若x不存在,不会引发错误
>>> s
{1, 'a', 3, 4, 'b', 2}
>>> s.discard(1)
>>> s
{'a', 3, 4, 'b', 2}
>>> s.discard(1)
>>> s
{'a', 3, 4, 'b', 2}
s.remove( x ) 将 x 从集合s中移除,若x不存在,会引发错误
>>> s
{'a', 3, 4, 'b', 2}
>>> s.remove('a')
>>> s
{3, 4, 'b', 2}
>>> s.remove('a')
Traceback (most recent call last):
File "<pyshell#273>", line 1, in <module>
s.remove('a')
KeyError: 'a'
s.pop() 随机删除并返回集合s中某个值,注意,因为set是无序的,不支持下标操作,没有所谓的最后一个,pop()移除随机一个元素,这和其他数据结构不同
>>> s
{3, 4, 'b', 2}
>>> s.pop()
3
s.clear() 清空
len(s) set支持len操作
set同样支持in操作
s.union( x ) 返回s与集合x的交集,不改变原集合s,x 也可以是列表,元组,字典。
s.intersection( x ) 返回s与集合x的并集,不改变s, x 也可以是列表,元组,字典。
s.difference( x )返回在集合s中而不在集合 x 中的元素的集合,不改变集合s, x 也可以是列表,元组,字典。
s.symmetric_difference( x ) 返回s和集合x的对称差集,即只在其中一个集合中出现的元素,不改变集合s, x 也可以是列表,元组,字典。
s.issubset( x ) 判断 集合s 是否是 集合x 子集
s.issuperset( x ) 判断 集合x 是否是集合s的子集
求交集,并集,差集,对称差集的另一种方法:
>>> s1 & s2 #交集
{3}
>>> s1 | s2 #并集
{1, 'a', 3, 4, 'b', 2}
>>> s1 - s2 #差集
{1, 'a', 2}
>>> s1 ^ s2 #对称差集
{1, 2, 4, 'b', 'a'}
九、字符编码
- 在内存中创建一个字符串
'charlotte'
- 在程序栈寄存器中创建一个变量x
- 使得寄存器中的变量
t
指向'charlotte'
(也就是把字符串'charlotte'
的地址赋给x)utf-8
或者GBK
等格式了,根据文件的编码类型不同而不同