Python一共有6种数据类型,分别是:数值型(Nmber)、字符串类型(Sring)、列表类型(List)、元组类型(Tuple)、字典类型(dictionary)、集合类型(Set)。
注:python并没有数组类型。数组类型数据是通过内置数据库numpy来实现,因此,Python数据结构中并不包含数组。
学习思路介绍:(为大家介绍我的学习思路,一、是方便大家更快地理解我撰写文章的逻辑顺序,让大家知道我为什么要按照这样的顺序写代码,二、也是为了方便大家学习记忆,当学习的知识比较多的时候,很容易搞混弄杂,这些思路也是我本人在学习总结后所得出来的。当然,不否认大家有更好的方法,欢迎大家评论区里分享哦~)
对于Python数据结构的介绍,本人借鉴数据库的整体逻辑思路,基础的从数据的增、删、查、改入手,这已经包含了大部分的操作,另外还有一小部分的特有的操作。
目录
一、数值类型(Nmber)
二、字符串类型(Sring)
三、列表类型(List)
四、元组类型(Tuple)
五、字典类型(dictionary)
六、集合类型(Set)
"""布尔类型"""
print(True)
print(False)
print(True+False)
# 逻辑运算,与或非 and or not
print(True and False)
print(True or False)
print(not False)
"""数字类型"""
# 算术运算--加 减 乘 除
print("2+3:",2+3)
print("5-3:",5-3)
print("2*6:",2*6)
print("8/3:",8/3)
# 其余常见运算
print("5//3整除结果为:",5//3) # 整除
print("8%3取余结果为:",8%3) # 取余
print("2的3次方结果为:",2**3) #2的3次方
运行结果为:
True
False
1
False
True
True
2+3: 5
5-3: 2
2*6: 12
8/3: 2.6666666666666665
5//3整除结果为: 1
8%3取余结果为: 2
2的3次方结果为: 8
Process finished with exit code 0
查找某个字符的索引值:find()
"""创建,定义,生成"""
string1 = "python"
string2 = "scala"
string3 = "java"
"""换行书写"""
# 方式一:\
string5 = "python"\
"java"
print("\方式的换行书写结果为:",string5)
# 方式二
string6 = """
sddij
adfjig
"""
print("string6的结果为:",string6)
# 方式三:\n
string7 = "java\npython"
print("\n方式后的结果为:",string7)
"""增----->字符串的拼接"""
# 方式一:+
string4 = string2+string1
print("string4:",string4) # scalapython
# 方式二:*
string = string3*3
print("string:",string)
# 删
# 查---->切片,索引
string = "dfisjfghorfisvv"
print("从第二位到第5位,步长为2:",string[1:5:2])
print("最后一位到第2位:",string[-1:0:-1]) # string[-1:0],没有输出结果,因为步长默认是1
# 改:字符串有着不可变性
"""其余常见操作"""
# 1.获取字符串的长度
print("字符串的长度:",len(string))
# 2.字符串的逆序输出
"""方式一"""
print("字符串的逆序输出:",string[::-1])
"""方式二"""
print("字符串的逆序输出",list(reversed(string)))
# 3.字符串的替换
string1 = string.replace("v","u",1)
print("string:",string)
print("string1:",string1)
# string和string1的值,体现了字符串的不可变性
# 4.大小写转换
# 4.1转化为大写
string1 = string.upper()
print(string)
print(string1)
# 4.2转化为小写
string = "dfisjfghorFFDFisvv"
string1 = string.lower()
print(string)
print(string1)
运行结果为:
\方式的换行书写结果为: pythonjava
string6的结果为:
sddij
adfjig
方式后的结果为: java
python
string4: scalapython
string: javajavajava
从第二位到第5位,步长为2: fs
最后一位到第2位: vvsifrohgfjsif
字符串的长度: 15
字符串的逆序输出: vvsifrohgfjsifd
字符串的逆序输出 ['v', 'v', 's', 'i', 'f', 'r', 'o', 'h', 'g', 'f', 'j', 's', 'i', 'f', 'd']
string: dfisjfghorfisvv
string1: dfisjfghorfisuv
dfisjfghorfisvv
DFISJFGHORFISVV
dfisjfghorFFDFisvv
dfisjfghorffdfisvv
Process finished with exit code 0
查找某个元素的索引值:index()
"""定义 关键字list"""
lst1 = ['cat','dog','pig','rabbit']
a = ('a','b','c','d')
a = list(a)
"""增"""
# 方式1:追加
lst1.append('tianjia')
print("追加元素后的lst1:",lst1)
# 方式2:*或者+
lst= lst1*2
print("追加方式2:*",lst)
lst= lst1+lst1
print("追加方式2:+",lst)
# insert方式
lst1.insert(0,'chicken')
lst1.insert(0,'chicken')
print("insert方式插入后的:",lst1)
"""删"""
# 方式1:remove
lst1.remove('chicken')
print("删除chicken后的:",lst1)
#方式二:pop
lst1.pop()
print("执行pop操作后的:",lst1)
"""查--->检索"""
lst = lst1[:2]
print("检索切片后的lst:",lst)
# 改
lst1[0]='new1' # 涉及1个
print(lst1)
lst1[:2]=(1,2,3) # 涉及多个
print(lst1)
# 没有replace()方法
"""其他操作"""
# 1.遍历
print("enumerate遍历后的结果为:")
for i in enumerate(lst1):
print(i)
# 2.列表推导式
print("列表推导式后的结果为:")
lst2 = [x*2 for x in lst1]
print(lst2)
"""数值型列表 """
lst3 = [4,5,6,7,5,8]
# 排序
lst3.sort(reverse=True) # reverse反序,默认是False,若为True代表逆序排列
print("使用sort排序后的结果:",lst3)
# 反置
# 内置函数reversed:
lst4 = [5,4,6,4,32,45,2,14]
print("使用reversed()内置函数反置后的结果:",list(reversed(lst4)))
lst5 = [2,5,6,8,6,4,5,4]
lst4.reverse()
print("使用reverse反置后的结果",lst5)
运行结果为:
追加元素后的lst1: ['cat', 'dog', 'pig', 'rabbit', 'tianjia']
追加方式2:* ['cat', 'dog', 'pig', 'rabbit', 'tianjia', 'cat', 'dog', 'pig', 'rabbit', 'tianjia']
追加方式2:+ ['cat', 'dog', 'pig', 'rabbit', 'tianjia', 'cat', 'dog', 'pig', 'rabbit', 'tianjia']
insert方式插入后的: ['chicken', 'chicken', 'cat', 'dog', 'pig', 'rabbit', 'tianjia']
删除chicken后的: ['chicken', 'cat', 'dog', 'pig', 'rabbit', 'tianjia']
执行pop操作后的: ['chicken', 'cat', 'dog', 'pig', 'rabbit']
检索切片后的lst: ['chicken', 'cat']
['new1', 'cat', 'dog', 'pig', 'rabbit']
[1, 2, 3, 'dog', 'pig', 'rabbit']
enumerate遍历后的结果为:
(0, 1)
(1, 2)
(2, 3)
(3, 'dog')
(4, 'pig')
(5, 'rabbit')
列表推导式后的结果为:
[2, 4, 6, 'dogdog', 'pigpig', 'rabbitrabbit']
使用sort排序后的结果: [8, 7, 6, 5, 5, 4]
使用reversed()内置函数反置后的结果: [14, 2, 45, 32, 4, 6, 4, 5]
使用reverse反置后的结果 [2, 5, 6, 8, 6, 4, 5, 4]
Process finished with exit code 0
"""创建,定义 不可变性"""
tuple1 = (1,2,3,4,"java",'python')
# 关键字tuple
a = ['dfer','grge',5,'frgr']
tuple2 = tuple(a)
print("转化为元组类型后的a为:",tuple2)
"""增"""
# 方式1:*
tuple3 = tuple1*2
print("*方式后的数据:",tuple3)
# 方式1:+
tuple4 = tuple1+(5,6,'defc')
print("+方式后的数据:",tuple4)
"""删"""
'''查'''
b = tuple1[-1:-4:-1]
print("切片检索后的数据为:",b)
"""改"""
# 元祖具有不可变性,但是当元组中有列表时,改列表可变,如:
tuple5 = (1,5,'grh','gthe','aewr',[1,2,5,'grdh'])
print("该数据类型为:",type(tuple5))
# tuple5[0] = 2 会报错,提示信息如下:
# TypeError: 'tuple' object does not support item assignment
# 当修改元组里的可变数据时:
tuple5[5][0]=9
print("修改后的结果为:",tuple5)
运行结果为:
转化为元组类型后的a为: ('dfer', 'grge', 5, 'frgr')
*方式后的数据: (1, 2, 3, 4, 'java', 'python', 1, 2, 3, 4, 'java', 'python')
+方式后的数据: (1, 2, 3, 4, 'java', 'python', 5, 6, 'defc')
切片检索后的数据为: ('python', 'java', 4)
该数据类型为:
修改后的结果为: (1, 5, 'grh', 'gthe', 'aewr', [9, 2, 5, 'grdh'])
Process finished with exit code 0
"""定义,创建"""
# 方式1:
dic1 = { "a":1,
'b':2 }
print("dic1为:",dic1)
# 方式2:
dic2 = dict(c=3,d=4)
print("dic2为:",dic2)
# 方式3:
dic3 = dict([('e',5),('f',6)])
print("dic3为:",dic3)
# 一个键对应多个值:将这多个值保存到另一个容器如列表或集合中
dic4 = dict(m=[1,2,3],n=[4,5,6])
print("dic4为:",dic4)
"""增"""
# 方式1:直接增加
dic1['q']=9
print("增加q之后的数据:",dic1)
# 方式2:updata()方法
dic1.update({'y':5,'r':6})
print("采用updata方法后的数据为:",dic1)
"""删"""
# 清除数据
dic2.clear()
print("dic2的数据被清楚后,输出结果:",dic2)
# 删除
del(dic3)
# print("执行del()操作后的数据为:",dic3) 会报错,提示如下:
# NameError: name 'dic3' is not defined
"""查----索引"""
# 直接获取
print("dic1中a对应的值为:",dic1['a'])
# 通过get方法
print("通过get方法获取字典中的值:",dic1.get('a'))
# 若获取的元素不存在时,可以自定义输出信息
print(dic1.get('f','索引不存在'))
"""改"""
dic1['a']=2
print(dic1)
"""其他的操作"""
# 1.获取所有的key
print("dic1所有的key为:",dic1.keys())
# 2.获取所有的值
print("dic1所有的值为:",dic1.values())
# 3.items 以列表返回可遍历的(键, 值)元组数组
print("items操作后的数据为:",dic1.items())
# 4.字典的拷贝
dic6 = dict([('a',1),('b',2),('c',3)])
y = dic6.copy()
y['c'] = 4
print("dic6为:",dic6)
print("y为:",y)
运行结果为:
dic1为: {'a': 1, 'b': 2}
dic2为: {'c': 3, 'd': 4}
dic3为: {'e': 5, 'f': 6}
dic4为: {'m': [1, 2, 3], 'n': [4, 5, 6]}
增加q之后的数据: {'a': 1, 'b': 2, 'q': 9}
采用updata方法后的数据为: {'a': 1, 'b': 2, 'q': 9, 'y': 5, 'r': 6}
dic2的数据被清楚后,输出结果: {}
dic1中a对应的值为: 1
通过get方法获取字典中的值: 1
索引不存在
{'a': 2, 'b': 2, 'q': 9, 'y': 5, 'r': 6}
dic1所有的key为: dict_keys(['a', 'b', 'q', 'y', 'r'])
dic1所有的值为: dict_values([2, 2, 9, 5, 6])
items操作后的数据为: dict_items([('a', 2), ('b', 2), ('q', 9), ('y', 5), ('r', 6)])
dic6为: {'a': 1, 'b': 2, 'c': 3}
y为: {'a': 1, 'b': 2, 'c': 4}
Process finished with exit code 0
"""定义,创建 """
set1 = {1,2,3,4,8,8}
print("set1的结果为:",set1) # 会去掉重复的数据 {1, 2, 3, 4, 8}
a =(1,5,6,'gtr','s','gtr')
set2 = set(a)
print("set2的结果为:",set2) # 去除位置靠后的重复数据
"""增"""
set1.add(15)
print("添加元素后的数据为:",set1)
"""删"""
# pop
set1.pop()
print("删除元素后的数据为:",set1) # 先删除第一个数据
# remove()
set1.remove(15)
print("删除元素后的数据为:",set1)
"""查"""
#验证是否存在
print("8在set1中吗?",8 in set1)
"""改"""
"""不可变集合"""
set3 = frozenset(set1)
运行结果:
set1的结果为: {1, 2, 3, 4, 8}
set2的结果为: {1, 's', 'gtr', 5, 6}
添加元素后的数据为: {1, 2, 3, 4, 8, 15}
删除元素后的数据为: {2, 3, 4, 8, 15}
删除元素后的数据为: {2, 3, 4, 8}
8在set1中吗? True
Process finished with exit code 0