(感谢您的点赞关注,您的点赞关注是我不断提升的最大动力!!!)一、其他基本数据类型
前一章节中,我们介绍了int、float、bool三个基本的数据类型,在本章节中,我们来继续讲讲其他的几个。
(1)list
list在Python中表示列表,功能类似于一个大小动态的数组,用英文中括号包裹起列表中的内容进行表示。Python比较灵活,万物皆对象,list中存的是对象就行,换句话说,什么内容动能往list中存:
array = [1, 2.0, "3", 0x4a, 0b10101]
甚至list内部还能有list:
array = [1, [2, 3, [4, 5]]]
list使用中括号加数字来查找其中某个位置或下标的元素,下标都是从零开始,例如以上一个嵌套list来说,“array[0]”得到的是数字“1”,“array[1][0]”则得到了数字“2”,因为“array[1]”为“[2, 3, [4, 5]]”也是一个list。
同时,由于list是大小动态可变的,因此还可以使用list自带的一些函数方法来进行内容的增删查改:
array = [1, 2.0, "3", 0x4a, 0b10101]# 查看下标为 1 的元素,列表从 0 开始计数print(array[1])# Output: 2.0# 更改下标为 1 的元素为 9.0array[1] = 9.0print(array)# Output: [1, 9.0, "3", 0x4a, 0b10101]# 移除元素 9.0array.remove(9.0)print(array)# Output: [1, "3", 0x4a, 0b10101]# 在列表末尾追加元素 4.0array.append(4.0)print(array)# Output: [1, "3", 0x4a, 0b10101, 4.0]# 在列表下标为 1 的位置插入元素 2.0array.insert(1, 2.0)print(array)# Output: [1, 2.0, "3", 0x4a, 0b10101, 4.0]# 移除列表末尾的元素array.pop()print(array)# Output: [1, 2.0, "3", 0x4a, 0b10101]# 查看列表的长度print(len(array))# Output: 5# 查看列表中是否有元素 "3"print("3" in array)# Output: True# 查看元素 "3" 在列表中的下标print(array.index("3"))# Output: 2
类型list的函数方法非常多,此处列举的只是一些常用的方法。
这里还要讲解一个重要的概念,索引和切片:
array = [1, 2, 3, 4, 5]print(array[: 3]) # Output: [1, 2, 3]print(array[1: 4]) # Output: [2, 3, 4]print(array[: -1]) # Output: [1, 2, 3, 4]
(2)tuple
元组tuple可以简单理解为list的约束版,也支持使用下标获取数据,使用“in”、“not in”来检查是否包含或不包含某个数据。list的内容、大小都可以变化,但是tuple一旦声明则不可变,如果强行操作,则会程序出错,出现如“TypeError”等类型的程序报错:
t = (1, 2.0, "3")# 更改 t[1] 的值t[1] = 3.0print(t)# Output: TypeError: 'tuple' object does not support item assignment# 在末尾添加内容t.append(4)print(t)# Output: AttributeError: 'tuple' object has no attribute 'append'
需要注意,tuple也能如list一样里面还能包含tuple。尽管tuple看似没有list那么灵活好用,但是在一些需要对数据进行强制约束,保持静态的情况下,list反而增大了数据被不慎修改的概率。
(3)dict
dict是dictionary的缩写,表示字典或键值对,使用英文状态的大括号表示。在编程时,我们可能会对一些程序内容进行编号化的操作,例如把一个list标记为1、一个tuple标记为2等,相当于给这些变量或内容取了一个别名,便于我们直接查询到相关内容。此处,键就是那个别名,通常为不可变数据,如整数、字符串、元组等,而值基本上可以是任意数据类型的内容,同样也可以是一个dict。至于浮点数则不推荐作为键,因为考虑到计算机使用二进制存储小数时,使用精度不同会导致本应相等的两个小数在小数点后多位的地方出现了精度误差,从而不相等。
d = { "1": 1 + 2, 2: "abcd", (3, 4): [0x12, 2.5], "p": { "q": 1.0, "r": "xyz" }}
我们可以使用类似于下标访问的中括号方式来获取某个键对应的值,中括号中填写所需访问的键:
也可以使用一些自带函数来获取dict的所有键或值等:
print(d.keys())# Output: dict_keys(['1', 2, (3, 4), 'p'])print(d.values())
(4)set
集合set类似于数学上的集合,也可以视为list的特殊化,但无法存储相同的两个值。set的声明需要使用对象创建的方式,其他某些操作,如查找、修改等与list类似,但是增加不使用“append”函数,使用“add”函数。
s = set()s.add(1)s.add(2)s.add(3)print(s)# Output: {1, 2, 3}s.remove(2)print(s)# Output: {1, 3}print(2 in s)# Output: False
(5)None
None严格来说不算一种数据类型,而是Python保留的关键词,一个特殊的常量。学过C/C++的读者可能会了解过null或nullptr,None可以视为它们的同类,表示“空”或“无”。None作为条件判断时,等同于False,而对于一个变量是否为None,使用“is”和“is not”来判断:
a = Noneprint(a is None) # Trueprint(a is not None) # False
二、数据类型转换
(1)不同类型间的转换
不同的数据类型可以实现转换,如int转为float、str转为int(前提是str中的内容是一个正确的数字)、bool转str等等,例如:
a = 1.0print(str(a), type(str(a)))# Output: 1.0 <class 'str'>b = "2.5"print(float(b), type(float(b)))# Output: 2.5 <class'float'>c = 3.3print(int(c), type(int(c)))# Output: 3 <class'int'>
注意,小数转整数时,会将小数点后的所有内容直接删去,若要四舍五入,则可以使用如“round”等函数来实现。
(2)转换为str的简易写法
在多个非str数据转换为str时,可能需要使用“str(var)”的形式去变换,如果该数据需要和str一起输出,那么可以写为:
integer = 123decimal = 4.56print("Number", integer, decimal)# orprint("Number " + str(integer) + " " + str(decimal))
实际上,这样的表达不直观且复杂,尤其第二种。在这里,我们介绍一种比较简洁的多数据类型混合为字符串的写法:
print(f"Number {integer}{decimal}")
使用f-string(引号前加字母f),在大括号中直接写要转为str的变量名,即可实现便捷的类型转换。
三、类的简要说明
前面所介绍的所有类型的数据,其本质上都是某个类产生的对象,如整数其实是int类的对象。在编程时,我们可以声明设置自己的数据类型或类,如“MyType”:
class MyType(object): pass # 后续内容待补充
这个类通常会有一个“__init__()”函数,用来初始化这个类创建的对象的某些值。因此,如第二部分中的数据类型转换,其实就是调用了这个类来产生了一个新的对象。
对于类的具体操作,我们将在后续的文章中给出。