Python-day12(数据容器【序列】的切片,集合的定义与操作)

 数据容器【序列】的切片

序列:是指内容连续,有序的,可以使用下标索引的一系列数据容器了。

切片:从一个大的序列,取出一个子序列就叫做切片操作。

语法结构:

序列[起始下标:结束下标:步长]

起始下标表示从何处开始,可以留空,留空作为从头开始。

结束下标(不含)表示何处结束,可以留空,留空视作取到结尾。

步长表示依次取元素的间隔:
步长为1,表示一个个取元素,步长为2,每跳过一个元素取,步长N表示跳过N-1个元素取,步长为负数表示反向取(起始下标,和结束下标也要反向标记)。

切片操作,不会影响到序列本身,而是回返回一个新序列。

示例

#对list进行切片
my_list=[0,1,2,3,4,5,6]
result1=my_list[1:4:1]#步长默认是1,可以不写
print(f"结果1是:{result1}")
#对tuple进行切片
my_tuple=[0,1,2,3,4,5,6]
result2=my_tuple[:]
print(f"结果2是:{result2}")
#对str进行切片
my_str="01234567"
result3=my_str[::2]
print(f"结果3是:{result3}")
#对str切片,从头开始,步数为-1
result4=my_str[::-1]
print(f"结果4是:{result4}")
#对列表切片从3开始到1结束,步长为-1
my_list=[0,1,2,3,4,5,6]
result5=my_list[3:1:-1]
print(f"结果5是:{result5}")
#对元组取子序列,步长为-2
my_tuple=(0,1,2,3,4,5,6)
result6=my_tuple=my_tuple[::-2]
print(f"结果6是:{result6}")

结果:

结果1是:[1, 2, 3]
结果2是:[0, 1, 2, 3, 4, 5, 6]
结果3是:0246
结果4是:76543210
结果5是:[3, 2]
结果6是:(6, 4, 2, 0)

练习:

my_str="万过薪月,员序程马黑来,nohtyP学"
new_my_str1=my_str[::-1][9:14]
print(f"逆序输出1:{new_my_str1}")
my_str="万过薪月,员序程马黑来,nohtyP学"
new_my_str2=my_str[5:10][::-1]
print(f"逆序输出1:{new_my_str2}")
my_str="万过薪月,员序程马黑来,nohtyP学"
new_my_str3=my_str.split(",")[1].replace("来","")[::-1]
print(f"逆序输出3:{new_my_str3}")

结果:

逆序输出1:黑马程序员
逆序输出1:黑马程序员
逆序输出3:黑马程序员

集合的定义与操作

列表可修改,支持重复元素且有序。元组、字符串不可修改、支持重复元素且有序。具有支持重复元素的局限,去重操作就不方便。

集合,不支持重复元素,且无序。

基础定义语法:

集合的性质解释和定义方法的验证

my_set={"传智教育","黑马程序员","itheima","传智教育","黑马程序员","itheima","传智教育","黑马程序员","itheima"}
my_set_empty=set()#定义空集合
print(f"my_set的内容是:{my_set},类型是“{type(my_set)}")
#由此可知集合不支持重复元素,且不能保证顺序
print(f"my_set_empty的内容是:{my_set_empty},类型是“{type(my_set_empty)}")

结果:

my_set的内容是:{'黑马程序员', 'itheima', '传智教育'},类型是“<class 'set'>
my_set_empty的内容是:set(),类型是“<class 'set'>

注意:集合是无序的,所以集合不支持下标索引访问,但是允许修改。

集合的操作 

总结:

1.添加新元素.add()函数
#添加
my_set.add("Python")
my_set.add("传智教育")
print(f"my_set添加元素后的结果是:{my_set}")

结果:

my_set添加元素后的结果是:{'黑马程序员', 'Python', 'itheima', '传智教育'}

2.移除元素.remove()函数
#移除
my_set.remove("黑马程序员")
print(f"移除黑马程序员后的结果是{my_set}")

结果:

移除黑马程序员后的结果是{'Python', '传智教育', 'itheima'} 

3.取出元素.pop()函数 

列表中可以通过pop()指定下标索引取出。

而集合中不支持下标索引,所以随机取出值。

#取出
my_set={"传智教育","黑马程序员","itheima"}
element=my_set.pop()
print(f"集合被取出的元素为:{element},取出元素后还有{my_set}")

结果:

集合被取出的元素为:传智教育,取出元素后还有{'itheima', '黑马程序员'}
 

4.清空集合.clear()函数
#清空
my_set.clear()
print(f"集合被清空后的结果是:{my_set}")

 结果

集合被清空后的结果是:set()

5.取两个集合的差集(集合1有,集合2没有的)

语法:集合1.difference(集合2)

结果:得出一个新集合,集合1和集合2不变。

#取出两个集合的差集
set1={1,2,3}
set2={1,5,6}
set3=set1.difference(set2)
print(f"取出差集后的结果是{set3}")
print(f"取出差集后,则原来的set1的内容为:{set1}")
print(f"取出差集后,则原来的set2的内容为:{set2}")

结果:

取出差集后的结果是{2, 3}
取出差集后,则原来的set1的内容为:{1, 2, 3}
取出差集后,则原来的set2的内容为:{1, 5, 6}

6.消除差集(消除两个集合的差集)

语法:集合1.difference_update(集合2)

结果:对比集合1和集合2,,在集合1中删除和集合2相同的元素,集合1被修改,集合2不变。

#消除两个集合的差集
set1={1,2,3}
set2={1,5,6}
set1.difference_update(set2)
print(f"消除差集后,集合1的结果:{set1}")
print(f"消除差集后,集合2的结果:{set2}")

结果:

消除差集后,集合1的结果:{2, 3}
消除差集后,集合2的结果:{1, 5, 6}
7.合并功能(使两个集合合并)

语法:集合1.union(集合2)

结果:得到一个新集合,集合1和集合2不变。

#合并
set1={1,2,3}
set2={1,5,6}
set3=set1.union(set2)
print(f"集合合并的结果:{set3}")
print(f"集合合并后,原有集合set1:{set1}")
print(f"集合合并后,原有集合set2:{set2}")

结果:

集合合并的结果:{1, 2, 3, 5, 6}
集合合并后,原有集合set1:{1, 2, 3}
集合合并后,原有集合set2:{1, 5, 6}

7.统计集合元素数量

语法:len(集合名)

#计算集合元素的数量len()
set1={1,2,3,4,5,1,2,3,4,5}
num=len(set1)
print(f"集合内的元素数量有{num}个")

结果:

集合内的元素数量有5个

8.集合的遍历

不支持下标索引,不能使用while循环,可以用for循环。

#集合的遍历
set1={1,2,3,4,5}
for element in set1:
    print(f"集合的元素有{element}")

结果:

集合的元素有1
集合的元素有2
集合的元素有3
集合的元素有4
集合的元素有5


集合的总结:

可以容纳多个数据

可以容纳不同类型的数据(混装)

数据是无序存储的。不支持下标索引

不允许重复数据存在

可以修改

支持for循环遍历,不支持while循环遍历

集合练习:

用for循环遍历列表,存入集合,再遍历集合打印。

my_list=['黑马程序员','传智播客','黑马程序员','传智播客','itheima','itcast','itheima','itcast','best']
set1=set()
for item in my_list:
    set1.add(item)
for element in set1:
    print(f"存入集合的结果有{element}")

结果:

存入集合的结果有黑马程序员
存入集合的结果有itheima
存入集合的结果有best
存入集合的结果有itcast
存入集合的结果有传智播客


不积跬步无以至千里,不积小流无以成江海。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值