作者的话
首先,我先申明,以下思路仅为个人理解,如有不同,望指导,谢谢。
数据类型它是什么,有什么用,怎么用就是它的全部内容,知识框架串联起来之后就是这三部分内容,没有什么特别的东西就只是单纯的可以培养这个习惯,之后就可以很轻松的学习使用之后串联的全部知识,当一次一次的深入学习,这个框架下的东西也就越来越丰富,底层的知识也就理解的越深。
基本数据类型的拆分理解
数字类型(number)
整型(int)
按照数学思维的理解就是整数,包含正整数、负整数、0;
使用python中的type函数可以写下如下内容
num1 = 0
num2 = -5
num3 = 5
print(type(num1)) # 打印: <class 'int'>
print(type(num2)) # 打印: <class 'int'>
print(type(num3)) # 打印: <class 'int'>
浮点数(float)
用数学思维的理解,就是有小数点的数字,如:1.0 、 -1.0
字符串(string)
字符串,“其串如其名”,单个字符串联在一起就是字符串了,算了,不开玩笑了,打住了,下面才是真的定义。
字符串是由字符组成的序列,能用单引号', 双引号",三引号''' 或者 """的形式定义它。
我上面说的单个字符其实也可以理解为字符串,当使用单引号‘1’,此时他就是字符串,python中是字符串类型,c语言中则是有字符类型和字符串类型,它们是分开的,有一些细分的差别。
# 使用单引号
string1 = 'Hello, World!'
# 使用双引号
string2 = "Python is so nice!"
# 使用三引号,可以包含多行
string3 = '''这是
一个多行字符串'''
string4 = """另一个
多行字符串"""
上面是字符串的定义操作,接下来该了解一下它的其他相关操作了,上代码
1.字符串串联
# 字符串之间的串接
name = 'Bob'
age = '25'
message = 'Hi, my name is ' name +' and I am ' age + 'years old.'
print(message)
2.多次打印同一个字符串
string = "Python"
re_string = string * 3
print(re_string) # 打印: Python Python Python
3.字符串的切片
代码中的的string[2:7]是指从下标(索引)为2到7,2为起始,7为末尾,就像数学的区间一样,左闭右开。[2, 7)
string = "HelloWorld"
sub_string = string[2:7]
print(sub_string) # 打印: lloWo
还有很多操作,就不进行一一列举了,pycharm是个好东西,你可以在尝试使用字符串操作时,使用它提出的补全的各种函数,编程要更深理解自然是需要自己手打出来的。
列表(list)
首先,还是先从是什么,有什么用,怎么用,这三个思路思考问题,然后在进行学习
列表是一种有序且可变的数据类型,有序(指的是有一定顺序),可变(指的是元素可变);
列表可以存储不同类型的元素,包括整型、字符串、列表、元组、字典、集合等主要的数据类型
列表的特点:
1.列表具有有序性:
列表中的元素按照他们添加的顺序进行存储,并且可以通过索引访问特定位置的元素;还有一个小点就是下标起始为0.
my_list = [10, 20, 30, 40, 50]
print(my_list[0]) # 打印: 10
2.列表具有可变性:
可以对列表进行修改,对元素进行增删改查
my_list = [1, 2, 3]
my_list.append(4) # 在末尾添加元素,4
my_list[1] = 5 # 修改第二个元素,让第二个元素的值改为5
del my_list[0] # 删除第一个元素,1
print(my_list) # 打印列表,[5, 3, 4]
3.列表可以包含重复元素
它因为可以包含重复的元素,就可以存放学科成绩,可以实现重复的成绩,有着集合不具有的有点,可以根据索引查询,但是它有顺序,集合没有顺序,索引如果要通过它实现随机分配等问题,就需要使用其他的一些模块使用这些模块定义的函数方法
my_list = [1, 1, 2, 2, 3]
4.列表推导式
详细可以看我以前的一篇博客,总之推导式唯一的作用,就是能够简洁代码;
python中的推导式-CSDN博客
然后对列表的一些操作无外乎就是增删改查,比如把外部数据添加到里面用append、extend、insert等,把列表内部的数据进行删除,根据索引进行删除pop,还可以直接删除对应的数据使用remove 、del等方式,然后修改就是根据索引进行修改,查询的话就是用索引返回对应的值index函数就行。
元组(tuple)
我对元组的理解就是一种特殊的列表,只是他的元素不可变,但是可以是用下面的方法实现对元组的改变,但是本质并不是对元组进行改变。
元组的特点:
1.元组具有有序性
2.特殊之处*不可变性*
元组的特殊就特殊在他是不可变的,以便用于保存固定参数,适合使用在需要固定的地方,避免因为地址的错误访问出现问题。
而且元组刚好是因为不可变的,因此可以使用它作为字典的key,列表是不可以的,而python的优点就在于使用它进行一些数据的分析操作,列表是可变的,正好用来存储数据,而又需要一定的可靠存储空间,使用元组就刚好,而且元组的不变性可以带来一些性能的优势,特别在涉及大量数据和频繁的操作时,还有可以使用元组用来打包函数返回的值等等。
创建元组
# 使用这样的方法创建单个元素的元组
my_tuple = (1,)
# 使用特殊的方法实现对元组内部的修改
my_tuple_2 = (1, 2, 3, 4, [1, 2, 3, 4])
my_tuple_2[4][0] = 0
print(my_tuple_2) # 打印修改了列表的元组
创建好元组了就需要对元组进行一些操作(也就是怎么用元组的问题),比如访问元组的元素。
访问方法与列表是相同的,按照索引查找即可,但还会关联到异常的内容,比如访问超出序列范围的索引就会触发IndexError
my_tuple = (10, 20, 30, 40, 50)
# 访问第一个元素
print(my_tuple[0]) # 打印: 10
# 访问第三个元素
print(my_tuple[2]) # 打印: 30
# 如果尝试访问超出范围的索引会引发 IndexError,还有另一类KeyError 他们呢作为LookupError的子类
# print(my_tuple[5]) # 会报错
# 可以使用负值索引从末尾开始访问
print(my_tuple[-1]) # 打印: 50
print(my_tuple[-3]) # 打印: 30
字典(dictionary)
字典,简称dict,但是不建议直接使用dict作为标识符,因为他算是pycharm中的一个关键字,命名需要规范一点,相应的这些数据类型除了number都是关键字不建议使用作为标识符,尤其是这些数据类型可以进行强转,如果用错了,就会把数据类型改变,导致出现各种错误。
好,还是先从字典的定义开始,字典是一种无序的键值对数据结构。
它用来干什么?它用于将键(通常是唯一且不可变的数据类型,如字符串、数字或元组)与值(可以是任何数据类型,包括列表、字典、函数等)关联起来。比如应用于存储和快速查找具有关联关系的数据,比如学生学号和姓名,商品ID和价格,身份证等。
定义字典的方式
花括号 {键:值}来创建字典
方式一我用的比较多,也许是我能力不足,达不到使用其他方式的资格
方式二与方式三我用的甚至算是很少,方式三更是我第一次使用,发现自己在写博客的时候,知识点越写越多,我自己的知识网络也更加清晰,写这些对自己也是一个提升,都看到这里了,确定不点个赞吗,不点赞也行,记得收藏,我发现很少有其他人的博客会像我写这么多纯粹自己的理解,很多都是知识点一一罗列完就没有了,收藏一下以后想找也方便,毕竟这个平台的想找到合适的的内容感觉确实不易。
# 方式一
my_dict_1 = {'key1': 'value1', 'key2': 'value2'}
print(my_dict_1)
# 方式二
my_dict_2 = dict(key1='value1', key2='value2')
print(my_dict_2)
# 方式三
key_value_pairs = [('key1', 'value1'), ('key2', 'value2')]
my_dict_3 = dict(key_value_pairs)
print(my_dict_3)
然后就到了怎么用字典了,代码示例:
# 创建字典:
my_dict = {'name': 'Alice', 'age': 25, 'city': 'New York'}
# 访问字典中的值,通过键来获取对应的值
print(my_dict['name']) # 打印: Alice
# 通过键修改字典中的值:
my_dict['age'] = 26
# 添加新的键值对
my_dict['job'] = 'Engineer'
# 删除键值对
del my_dict['city']
# 打印字典
print(my_dict)
查字典自然也是有方法的,查新华字典是查询,查询python字典也是查询,那他们有什么不同?自然就需要你去试试了。
还有一些返回相关键或值抑或是键值对的方法,例如keys(),values(),items()等方法,各有各的形式吧,而且当使用for循环遍历字典时,也是很好用的。
集合(set)
集合,相比都不陌生了,从初中学到大学,它是什么也就无须多言了,但也请不要小看他,如果要理解它在python中是什么的话,那它就是一个特殊的数据容器。
# 直接创建
my_set = {1, 2, 3}
# 由列表强转创建
my_list = [1, 2, 2, 3, 3, 3]
my_set_from_list = set(my_list)
print(my_set_from_list) # {1, 2, 3}
集合的特点:
1.集合的元素唯一,集合中的元素不会重复
2.集合内部无序
那,就说说为什么它这么重要吧,它具有什么让他的地位如此之高?
1.数据去重,当现在有一个数据容器存放着大量的数据,可以将他快速转化为集合从未找出唯一项。
2.可以快速判断某数据是否在集合中,仅仅需要使用in运算符判断一下就可以。
3.集合之间的运算(交并补等运算),在处理不同数据集合之间的关系很好用,不至于想不到解决办法,毕竟其他方法哪怕再复杂,也有集合给你兜底,就像一个老大哥一样。
# 并集 使用 | 运算符
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2 # 或者 set1.union(set2)
print(union_set) # 打印{1, 2, 3, 4, 5}
# 交集 使用 & 运算符
intersection_set = set1 & set2 # 或者 set1.intersection(set2)
print(intersection_set) # 打印 {3}
基本数据类型的关系的理解
基本数据类型的关系大致分为两类 :组合数据类型 、可变数据类型与不可变数据类型
可变数据类型与不可变数据类型
为什么存在?因为内存的管理要求分为这两个类型;
不可变类型由于需要保证数据一致性和安全性而诞生,例如配置参数、常量值等等。
不可变类型由于它具有固定性,可以被共享和缓存重用,从而节省内存。其中比较明显的就是缓存重用,因为缓存的存在,还需要经常清除缓存,可以说有利有弊。
可变数据类型由于python本身自己需要强大的开发效率,需要进行大量的数据分析,因此必须有这种数据站出来顶住数据分析的重任,例如缓存、数据集合等。
可变类型则适用于动态修改的大量数据结构,通过避免让对象频繁的创建和销毁以节省内存,相应的控制数据的规模需要存储实际需要的数据。举个例子,不如在使用列表时,不要每次都创建一个列表,可以在原列表进行一定的操作。
这个分类就是由内存决定的,只需要从内存的角度考虑这个问题,他的本质区别就在这里了。
这两者最本质的区别在于:
内存中的那块地址所存储的值是否可以被修改
最离谱的就是,他的可不可变刚好与内存地址的改变相反
可变数据类型:变量的值改变,地址不会变
不可变数据类型:变量的值改变,地址会变
组合数据类型
是什么:在Python中,组合数据类型(也称为复合数据类型)是指可以包含其他数据类型的数据结构。
常见的组合数据类型包括列表(list)、元组(tuple)集合(set)和 字典(dictionary)。
有什么用:这些数据结构能够将多种类型的数据组织在一起,是的数据处理和操作更加灵活和便捷。
组合数据类型有以下几个优点:
1.组织数据:能够将相关数据组合在一起,形成一个有组织的结构,使得数据管理更加方便。比如根据需求可以把列表变成集合,可以把字典转换成列表。相对于基本数据类型只能表达式单一的数据,组合数据类型就明显可以操作比基本数据类型所能处理的复杂的多的数据结构。
2.灵活性:可以包含不同类型的数据,比如一个列表可以包含整数、字符串、甚至其他列表等数据。
3.代码简洁:通过组合数据类型,可以减少代码的复杂度,提高代码的可读性和可维护性。如果通过转换数据类型的话,很多需求就可以很轻松的解决了。
4.操作简单:组合数据类型提供了很多的内置方法,可以很方便的进行数据的增删改查,自然是显而易见了。
怎么用:
使用集合的操作,需要存储和操作一组不重复的元素时,可以用set
有序数据集合:用列表或者元组
键值对映射:需要用键值对时,可以用dict
最关键的是,嵌套结构,当需要表示复杂的嵌套数据结构,可以组合起来用,比如处理Json数据或者树形结构的时候。
关于强制转换问题
数据类型之间的转换并不是可以随意转换的,需要遵守一定规则,
1.数字类型:
整数转浮点数,可以随意转
浮点数转整数,直接转换会截断小鼠点后面对数据,建议使用round()函数四舍五入
2.字符串与数字类型:
字符串转数字,需要让字符串内数据全部是数字,否则会抛出异常,无法转换
数字转字符串的话就可以随意了
3.组合数据类型:
列表、元组、集合之间的话,可以通过相应的函数转换,但需要注意元素的类型和数据,不然还是会抛出异常,不过简易初学者的话,还是多敲一敲,多见一见异常,见多了之后就自然知道是哪里的问题了
字典类型就比较特殊了,他是键值对结构,不太好弄,其实这篇博客,我学到了创建字典的第三种方式可以通过第三种方式,把字典转换成列表和元组,也可以把键值对分别遍历出来,然后再多一步,转换的过程。
# 定义一个字典
my_dict = {'a': 1, 'b': 2, 'c': 3}
# 字典转列表
# 列表元素为键值对组成的元组
dict_to_list = list(my_dict.items())
print("字典转列表:", dict_to_list) # 打印: [('a', 1), ('b', 2), ('c', 3)]
# 字典转元组
# 元组元素为键值对组成的元组
dict_to_tuple = tuple(my_dict.items())
print("字典转元组:", dict_to_tuple) # 打印: (('a', 1), ('b', 2), ('c', 3))
# 字典转集合
# 集合元素为字典的键
dict_to_set = set(my_dict.keys())
print("字典的键转集合:", dict_to_set) # 打印: {'a', 'b', 'c'}
# 集合元素为字典的值
dict_value_to_set = set(my_dict.values())
print("字典的值转集合:", dict_value_to_set)# 打印{1, 2, 3}
感谢观看,如有问题,随时评论或私信,如有帮助感激不尽。