元组与集合

一、定义

Python内置的数据结构之一,是不可变序列

不可变序列:字符串、元组,没有增删改操作

可变序列:可以对序列进行增删改操作,对象地址不发生更改

lst = ['hello',98,'me']
print(lst)
print(id(lst))
lst.append('sa')
print(lst)
print(id(lst))

s = 'boy'
print(s,id(s))
s = s + 'girl'
print(s,id(s))
结果:

['hello', 98, 'me']
2526617821768
['hello', 98, 'me', 'sa']
2526617821768
boy 2526619059064
boygirl 2526619887968

二、元组的创建方式

(1)第一种创建方式,使用()

(2)第二种创建方式,使用内置函数tuple()创建

t = ('you','are','so','nice')
print(t,id(t))
d = 'you','are','so','nice'
print(d,id(d))

s = tuple(('Python','world',98))
print(s,id(s))
结果:

('you', 'are', 'so', 'nice') 1901336727944
('you', 'are', 'so', 'nice') 1901336727944
('Python', 'world', 98) 1901336715128

(3)只包含一个元组的元素需要使用逗号和小括号

t = (10,)  #逗号不能省,否则会被认为int类型

三、为什么要将元组设计成不可变序列?

增强对数据的保护,当多任务对同一内存数据读写时,只读方式,只能看,不能摸,相当于加速。

当元组中元素是不可变对象时,不能在引用其他对象

当元组中元素是可变对象时,则可变对象的引用不允许改变,但数据可以改变

四、元素的遍历

元组是可迭代对象,利用for... in循环遍历

t = ('you','are','so','nice')
"'第一种使用索引遍历"
print(t[0])
print(t[1])
print(t[2])
print(t[3])
"'for...in'"
for item in t:
    print(item)

五、集合的概述与创建

与列表、字典一样都属于可变类型的序列

没有value

集合与字典相同,不允许重复,重复元素会去掉

集合中的元素是无序的

(1)集合的创建方式,使用{}

(2)使用内置函数set()

#集合
s = set(range(6))
print(s)
print(set([3,2,2,21,1]))#集合是无序的
print(set('Python'))
print(set({124,3,4,4,5}))
d = set()
print(d,type(d))
结果:

{0, 1, 2, 3, 4, 5}
{1, 2, 3, 21}
{'h', 'o', 't', 'n', 'y', 'P'}
{5, 3, 124, 4}
set() <class 'set'>

六、集合的相关操作

集合元素的判断操作    in  not in

新增元素    调用add()方法,一次添加一个元素

     调用update()方法至少添加一个元素

m = {10,203,0,30,40}
print(10 in m)
m.add(90)
print(m)
m.update({100,200})
m.update([9384,232,23])
m.update((89,45,231))
print(m)
结果:

True
{0, 40, 10, 203, 90, 30}
{0, 100, 231, 40, 200, 10, 203, 9384, 232, 45, 23, 89, 90, 30}

删除元素  调用remove()方法,一次删除一个指定元素,若指定元素不存在抛出keyerror

      调用discard()方法,一次删除一个指定元素,若指定元素不存在不抛出异常

      调用pop()方法,一次只删除一个任意元素  #不能指定参数,只能任意删除

      调用clear()方法,清空集合

m = {10,203,0,30,40}
m.remove(10)
m.discard(1)
m.pop()
m.clear()
print(m)

七、集合间的关系

两个集合是否相等   ==    !=

一个集合是否是另一个集合的子集   issubset()

一个集合是否是另一个集合的超集   issuperset()

判断交集   isdisjoint()

 

交集操作 intersection()   &

并集操作  union()  |

差集操作 difference()   -

对称差集  symmetric_difference()

八、集合生成式

{i*i   for  i   in  range(1,10)   }

元组没有生成式

lst = [i*i  for i in range(10)]
print(lst)

s = {i*i  for i in range(10)}
print(s)
结果:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}

 

 

 

 

列表、字典、元组、集合总结
数据结构 是否可变 是否重复 是否有序 定义符号
列表(list) 可变 可重复 有序 【】
元组(tuple) 不可变 可重复 有序 ( )
字典(dict) 可变

key不可重复

value可重复

无序 {key:value}
集合(set) 可变 不可重复 无序 { }

 

posted @ 2021-01-30 14:00  城东有个混子  阅读(202)  评论(0)    收藏  举报