Python学习10:集合的用法与初识Python函数

笔者:风起怨江南 出处:https://blog.csdn.net/JackMengJin 笔者原创,文章欢迎转载,如果喜欢请点赞+关注,感谢支持!

 

目录

一、集合

1.1 集合的定义

1.2 有序无序的区别

1.3 集合的使用场景

 

二、初识函数

2.1 什么是函数?

2.2 函数的使用

2.3 函数的调用

2.4 return和print区别


 

集合的用法和函数的定义

一、集合

在之前的学习中,涉及到了字符串,列表,元组,字典等等数据类型相关知识,这次给大家带来的是集合相关的知识点。

1.1 集合的定义

集合是什么?

集合(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()

1.2 有序无序的区别

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

同样的,也是有序数据类型才能进行步长操作,而无序的数据类型是不支持没有步长的概念的。

总结:有序的数据类型有字符串、元组、列表等,可以用索引、分片、步长等对其进行操作;而无序的数据类型比如字典、集合等,不可以利用索引、分片、步长等对其进行操作。


1.3 集合的使用场景

说了那么多,集合这不能用,那不能用,那集合的应用场景是什么?什么时候用集合?

之前说了,集合是不重复的集合,所以集合的最主要的应用场景,就是去重!

假如说现在有一个列表: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函数的所有内容。

2.1 什么是函数?

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。更直白的话说就是:函数是当输入一定的数据以后,

能根据里面的执行步骤,可以算出另一些数据的值。同时可以得到数据,获取输出值。

比如 x = 1 + y,这就是函数。

举个例子更直白点,洗衣机就是函数:

洗衣服==>输入值(洗衣粉,脏衣服,水) ==> 得到干净的衣服

我不用关系洗衣机是怎样运转的,我只关心将衣服放入洗衣机,加入水和洗衣粉后,经过洗衣机的运转,得到干净的衣服。


2.2 函数的使用

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明
  • 函数内容以冒号起始,并且缩进
  • return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的return相当于返回 None
def () 函数的名称(函数的参数1,参数2,参数3):
    '''文档字符串 docstring
    函数的注释,这个函数是干嘛用的
    参数:
    返回值:
    '''
    (缩进)函数体,函数具体执行的逻辑
    return 函数的返回值(输出)
    #除了def()其他都要缩进

举一个简单的函数例子,比如加法运算:

#函数
def addition(a,b):
    '''加法运算'''
    c = a + b
    return c

这就是一个简单的自定义函数。


2.3 函数的调用

我们现在学会了定义一个函数了,那么如何调用函数呢?

#函数
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 = [输入数字]后,运行可以打印出从小到大的排序。


2.4 return和print区别

return的定义:return语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None。

而print就是显示在屏幕上,打印出来return是函数运行的结果,获取结果以后不一定会打印出来。

其实这里还是用通俗的例子来举例更容易去理解:

把衣服放进洗衣机里洗,洗衣机就是函数;

衣服洗好后,干净的衣服就是return返回的表达式;

而你想把衣服穿上,这个操作就是print打印,把结果打印到屏幕上。

第二节便是初识函数相关内容,初级阶段先知道如何去定义函数,并如何调用函数就可以了,更多函数知识在下一讲再详细讲解。

 


 

以上便是《Python学习10:集合的用法与初识Python函数》的所有内容,更多python学习请继续关注我的博客——风起怨江南(传送门),不定期更新,原创不易,如果喜欢请点赞和关注,谢谢大家的支持!

想获得免费的学习资料请添加微信公众号——风起怨江南,非常感谢大家的关注和支持!

你可能感兴趣的:(Python)