set:是一组类似于dict的集合,类似于value,不过它不存储value。
本质:无序和无重复元素的集合。
- 创建:set( )
创建set需要一个list或者tuple或者dict作为集合输入
s1 = set([1, 2, 3, 3, 5, 4]) #列表[ ]
print(s1)
输出:
{1, 2,3,4,5}
s2 = set((1, 3, 3, 2)) #元组( )
print(s2)
输出:
{1,2,3}
s3 = set({1:"haha", 2:"wahaha"}) #字典{ }
print(s3)
输出:
{1,2}
- 添加:.add( )
(可以添加重复元素,对结果没有影响)
s4 = set([1, 2, 4, 3, 3])
s4.add(6)
s4.add(4) #可以添加重复的元素,但不会有变化
#s4.add([6, 7]) #set的元素不能是list,因为列表是可变的
s4.add((6, 7))
#s4.add({1:"c",2:"f"}) #set的元素不能是字典,因为字典是可变的
print(s4)
- 插入:.update( )
插入整个列表,元组,字符串,打碎插入
s5 = set([1, 2, 3, 4, 5])
s5.update([6, 7])
s5.update((8, 9))
s5.update("miss")
print(s5)
输出:
{1, 2, 3, 4, 5, 6, 7, 8, 9,'m', 'i', 's'}
- 删除:.remove( )
s6 = set([1, 2, 3, 4])
s6.remove(3)
print(s6)
输出:
{1, 2, 4}
- 遍历:
s7 = set([1, 2, 3, 5, 4])
for i in s7:
print(i)
输出:
1 2 3 4 5
注意:set没有索引
- 交集和并集
s8 = set([1, 2, 3])
s9 = set([2, 3, 4])
a1 = s8 & s9 #求交集
a2 = s8 | s9 #求并集
print(a1)
print(type(a1))
print(a2)
输出:
{2,3}
<class 'set'>
{1, 2, 3, 4}
- 类型转换:
集合转列表set-list : list(集合名)
s3 = {1, 2, 3}
l3 = list(s3)
print(l3)
集合转元组set-tuple:tuple(集合名)
s4 = {2, 3, 4}
t4 = tuple(s4)
print(t4)
小试牛刀:list去重
思路分析:list转set,set自动去重,set转回list。(类型转换和set的性质)
l = [1, 2, 2, 3, 5, 7, 4, 5, 6, ,7]
s = set(l)
l = list(s)
print(l)
输出:
[1, 2, 3 ,4, 5, 6, 7]
可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(Iterable)。
可以用isinstance()去判断一个对象是否是Iterable对象。
可以直接作用于for的数据类型一般分两种:
1.集合数据类型:list,tuple,dict,set,string
2.是generator,包括生成器和带yield的generator function
from collections import Iterable #引入包
print(isinstance([],Iterable)) #列表是Iterable对象
print(isinstance((),Iterable)) #元组是
print(isinstance({},Iterable)) #字典是
print(isinstance("",Iterable)) #字符串是
print(isinstance((x for x in range(10)),Iterable)) #是
迭代器:不但可以作用于for循环,还可以被next()函数不断的调用,并返回下一个值,直到最后抛出一个StopIteration错误表示无法继续返回下一个值。
可以被next()函数调用并不断返回下一个值的对象成为迭代器。(Iterator对象)
可以用isinstance()函数判断一个对象是否是Iterator对象。
from collections import Iterator #引入包
print(isinstance([],Iterator)) #false
print(isinstance((),Iterator)) #false
print(isinstance({},Iterator)) #false
print(isinstance("",Iterator)) #false
print(isinstance((x for x in range(10)),Iterator)) #true
eg:
l = (x for x in range(5))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
输出:
0 1 2 3 4
转成迭代器Interator对象
格式:iter()
list,tuple,dict,字符串均可转为Interator对象。
a = iter([1, 2, 3]) #list转为Interator对象
print(next(a))
输出:1