笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!
目录
一、集合
1.1 集合的定义
1.2 有序无序的区别
1.3 集合的使用场景
二、初识函数
2.1 什么是函数?
2.2 函数的使用
2.3 函数的调用
2.4 return和print区别
在之前的学习中,涉及到了字符串,列表,元组,字典等等数据类型相关知识,这次给大家带来的是集合相关的知识点。
集合是什么?
集合(set)在Python里是一个无序的不重复元素的集合。无序的概念稍后会讲到,不重复就是集合里的元素不能重复,而序列在之前的列表中讲到过,序列是以某种方式(比如编号)组合起来的数据元素的集合。
通过上面可以发现集合特点:无序,不重复,多元素的集合。
集合的表示方法,花括号:
{}
#set
set = {1,2,3,4,5}
print(type(set))
print(set)
{1, 2, 3, 4, 5}
集合的表示方法是不是跟字典很像?
那么一个空的{}是字典还是集合呢?举例:set = {}
#set
set = {}
print(type(set))
print(set)
{}
咦?花括号{}不是表示集合么?为什么打印出数据类型却是字典数据类型呢?
这是因为Python规定:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
所以集合的创建格式为:
parame = {value01,value02,...}
或者
set(value)
也就是单独的set ={}代表的是字典而不是集合,想创建空的集合需要用到set = set()。
#set
set = set()
print(type(set))
print(set)
set()
Python 中的字符串、列表以及元组在很多方面上比较相似,很大程度是因为它们的数据存储是有序的,也就是我们统称的序列。而集合是无序的,有序无序到底区别在哪?
所有有序的数据结构都可以用到索引。
比如列表:
list = ['aaa','bbb','ccc','ddd']
print(list[1])
bbb
比如元组:
tuple = ('aaa','bbb','ccc','ddd')
print(type(tuple))
print(tuple[1])
bbb
再比如字符串:
str= 'aaabbbcccddd'
print(type(str))
print(str[1])
a
可以看到有序的数据类型(比如列表,元组,字符串等等)都是可以进行索引去值的,而无序的数据类型是不能进行索引的。
比如字典:
dict1 = {'1':'aaa','4':'ddd'}
print(type(dict1))
print(dict1[1])
Traceback (most recent call last):
File "E:/set.py", line 16, in
print(dict1[1])
KeyError: 1
直接报错,打印KeyError: 1,也就是字典dict里没有1这个key。
那么对集合进行索引会有什么效果么?
set1 = {1,2,3,4,5,6,7}
print(type(set1))
print(set1[1])
Traceback (most recent call last):
File "E:/set.py", line 19, in
print(set[1])
TypeError: 'set' object is not subscriptable
这里也是直接报错:TypeError: 'set' object is not subscriptable,翻译过来就是类型错误:'set'对象不能进行下标访问。
sub是下标的意思,scriptable可编写脚本的
这也就证明有序的数据类型是可以进行索引的,而无序的数据类型是不允许进行索引。
那么切片呢?其实和索引一样,有序的数据类型可以切片操作,而无序的数据类型不支持切片。
字符串、列表、元组的切片:
str1 = 'aaabbbcccddd'
print(type(str1))
print(str1[1:5])
list1 = ['aaa','bbb','ccc','ddd','eee']
print(type(list1))
print(list1[1:3])
tuple1 = ('aaa','bbb','ccc','ddd','eee')
print(type(tuple1))
print(tuple1[1:3])
aabb
['bbb', 'ccc']
('bbb', 'ccc')
字典和集合明显不支持切片:
dict = {'1':'aaa','4':'ddd','x':'red','r':'look'}
print(type(dict))
print(dict[1:2])
Traceback (most recent call last):
File "E:/set.py", line 27, in
print(dict[1:2])
TypeError: unhashable type: 'slice'
对字典切片会出现报错:TypeError: unhashable type: 'slice'
set1 = {1,2,3,4,5,6,7}
print(type(set1))
print(set1[1:4])
Traceback (most recent call last):
File "E:/set.py", line 29, in
print(set1[1:4])
TypeError: 'set' object is not subscriptable
对集合切片会出现报错:TypeError: 'set' object is not subscriptable
同样的,也是有序数据类型才能进行步长操作,而无序的数据类型是不支持没有步长的概念的。
总结:有序的数据类型有字符串、元组、列表等,可以用索引、分片、步长等对其进行操作;而无序的数据类型比如字典、集合等,不可以利用索引、分片、步长等对其进行操作。
说了那么多,集合这不能用,那不能用,那集合的应用场景是什么?什么时候用集合?
之前说了,集合是不重复的集合,所以集合的最主要的应用场景,就是去重!
假如说现在有一个列表:a = [1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,],现在要求去除列表中重复的元素,如果通过set集合的方法如何去重?
#set去重
a = [1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,]
print(a)
print(list(set(a)))
[1, 2, 1, 2, 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 8, 9, 0, 1, 1, 1, 2, 2, 1]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
先将列表转换为集合,再将集合转换为列表,即可完成去重。
同样,我们可以对字符串进行去重操作:
#set去重
a = '1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,'
print(a)
print(str(set(a)))
得到的结果是:
1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,
{'7', '9', ',', '2', '1', '4', '6', '0', '3', '5', '8'}
这里会发现得出的结果顺序和之前不太一样了,在运行一下试试:
1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,
{'4', '8', '7', '5', '0', '6', '9', '3', '2', '1', ','}
1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,
{',', '9', '2', '1', '4', '6', '0', '7', '5', '3', '8'}
1,2,1,2,1,1,1,1,1,2,3,4,5,6,7,7,7,7,8,9,0,1,1,1,2,2,1,
{'2', '7', '6', '8', '0', ',', '4', '1', '9', '5', '3'}
通过这么多尝试后,发现每一次的顺序都和之前的不一样。
这也就印证了集合另一个特定:无序。
总结:
目前来讲,集合最大的作用就是去重,同时集合是无序的,所以不能使用索引、分片、步长等操作。
如果需要去重,先转换成集合,再进行转换成其他的数据类型即可完成去重操作,但需要注意的是此时的元素是无序的。
更多集合知识点后续根据具体场景再详细讲解。
函数是Python非常重要的内容,我会用3篇文章来详细讲解Python函数的所有内容。
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。更直白的话说就是:函数是当输入一定的数据以后,
能根据里面的执行步骤,可以算出另一些数据的值。同时可以得到数据,获取输出值。
比如 x = 1 + y,这就是函数。
举个例子更直白点,洗衣机就是函数:
洗衣服==>输入值(洗衣粉,脏衣服,水) ==> 得到干净的衣服
我不用关系洗衣机是怎样运转的,我只关心将衣服放入洗衣机,加入水和洗衣粉后,经过洗衣机的运转,得到干净的衣服。
你可以定义一个由自己想要功能的函数,以下是简单的规则:
def () 函数的名称(函数的参数1,参数2,参数3):
'''文档字符串 docstring
函数的注释,这个函数是干嘛用的
参数:
返回值:
'''
(缩进)函数体,函数具体执行的逻辑
return 函数的返回值(输出)
#除了def()其他都要缩进
举一个简单的函数例子,比如加法运算:
#函数
def addition(a,b):
'''加法运算'''
c = a + b
return c
这就是一个简单的自定义函数。
我们现在学会了定义一个函数了,那么如何调用函数呢?
#函数
def addition(a,b):
'''加法运算'''
c = a + b
return c
print(addition(1,2))
直接用print打印出来:
3
这里可以看到,在定义的函数里将想要运算的数字填写进去,再通过print打印即可显示出运算的结果,这就是函数的调用。
同样,可以把调用的结果赋值:给一个变量,再去对这个变量打印也是可以得到结果:
#函数
def addition(a,b):
'''加法运算'''
c = a + b
return c
num = addition(1,2)
print(num)
3
这里就能更清楚的去理解函数:可以不关系函数里具体怎么实现的,只需要将想要计算的值输入进去,再通过直接打印或赋值等手段,即可拿到这个函数运算出的结果。
这里以一个复杂的函数举例,定义一个冒泡排序的函数:
定义函数——冒泡排序
def bubbleSort(arr):
'''
函数名称:冒泡排序函数
函数作用:从小到大排序
函数用法:直接在bubbleSort(arr = [数字1,数字2,数字3....]),从小到大排序
'''
for i in range(1, len(arr)):
for x in range(0, len(arr) - i):
if arr[x] > arr[x + 1]:
arr[x + 1], arr[x] = arr[x], arr[x + 1]
return arr
#打印结果
print(bubbleSort(arr = [22,7,6,89,12,8,1,100,123,2,15]))
[1, 2, 6, 7, 8, 12, 15, 22, 89, 100, 123]
可以看到在arr = [输入数字]后,运行可以打印出从小到大的排序。
return的定义:return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。
而print就是显示在屏幕上,打印出来。return是函数运行的结果,获取结果以后不一定会打印出来。
其实这里还是用通俗的例子来举例更容易去理解:
把衣服放进洗衣机里洗,洗衣机就是函数;
衣服洗好后,干净的衣服就是return返回的表达式;
而你想把衣服穿上,这个操作就是print打印,把结果打印到屏幕上。
第二节便是初识函数相关内容,初级阶段先知道如何去定义函数,并如何调用函数就可以了,更多函数知识在下一讲再详细讲解。
以上便是《Python学习10:集合的用法与初识Python函数》的所有内容,更多python学习请继续关注我的博客——风起怨江南(传送门),不定期更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!
想获得免费的学习资料请添加微信公众号——风起怨江南,非常感谢大家的关注和支持!