1、元组

元组中只包含一个元素时,该元素后面要加逗号','

元组和列表转换:list(tup)    tuple(t_list)

对元组 t 来说,元组的任意切片,比如t[:] 不创建副本,而是返回同一个对象的引用。

此外,tuple(t) 获得的也是同一个元组的引用。

1.1、元组拆包

(1)平行赋值拆包

a,b = (1,2)

利用平行赋值拆包,可实现变量值交换,b, a = a, b

(2)利用 * 将元组拆为函数的参数

     def fun(a,b):  #一个函数定义了两个参数

     tup = (100,200)

     fun(*tup)  #使用*将元组tup的成员拆分成函数的参数

(3)用*处理拆包剩下的元素

     当我们仅需要拆出元组的部分元素,而不是全部元素时,可以用带*的变量替代未拆的全部元素,而且带*的变量可以出现在拆包的任何位置,例如:

a, b, *rest = range(5)  #被拆成了  0,1,[2,3,4]

a, *rest,b = range(5)  #被拆成了  0,[1,2,3],4

(4)嵌套元组拆包

当被拆包的元组是个嵌套元组时,也可以对内嵌的元组进行拆包:

x = (1,2,3,(4,5))

a,b,c,(d,e) = x #同时对外层元组和内嵌元组进行拆包

1.2、具名元组collections.namedtuple

因为元组的局限性:不能为元组内部的数据进行命名,所以我们往往并不知道一个元组所要表达的意义,所以在这里引入了具名元组collections.namedtuple 。

namedtuple 对象的定义如以下格式:

collections.namedtuple(typename, field_names, verbose=False, rename=False)

  1. typename:元组名称
  2. field_names: 元组中元素的名称,可以是由多个字符串组成的可迭代对象,或者是由空格分隔开的字段名组成的字符串
  3. rename: 如果元素名称中含有 python 的关键字,则必须设置为 rename=True
  4. verbose: 默认就好

 

例如:

User = collections.namedtuple('User', ['name', 'age', 'id'])  #定义具名元组

User = collections.namedtuple('User', 'name age id')      #定义具名元组

user = User('tester', '22', '464643123')                 #实例化具名元组

print(User)

# 获取具名元组的属性

print( user.name )

print( user.age)

print( user.id )

2、集合set

集合(set)是一个无序的不重复元素序列,集合在内部以散列表的方式存储,因此运算速度相当快。

创建集合set

(1)myset={arr1,arr2,arr3},其中的成员只能是可散列序列,所以集合的成员不能是list、dict、set等不可散列的类型。set 类型本身是不可散列的,但是frozenset 可以。因此可以创建一个包含不同 frozenset 的 set。

(2)myset = set(arr)  将list,元组,字典、字符串或集合等序列转换为集合set,在转换时会自动去除重复的元素,因此,可通过将序列转换为集合来达到去重的目的。arr可以是list,元组,字典,字符串、集合等。字典转set集合,只取了字典的key,相当于将字典中的dict.keys()列表转成set集合

(3)创建空集合 set(),不能用 { },因为 { } 是用来创建一个空字典的

2.1、集合常用函数:

函数

说明

myset.add(arr)

在集合中添加新元素,arr可以是字符串、元组等,将arr作为一个整体添加到集合中。

myset.update(arr1,arr2)

在集合中添加新元素,arr可以是字符串、列表、元组字典等,把要传入的元素拆分成单个字符,存于集合中,并去掉重复的字符。可以一次添加多个arr,用逗号隔开即可。

myset.remove(arr)

删除集合中元素。如果该元素不存在则报错

myset.discard(arr)

删除集合中元素,如果元素不存在则不报错。

value=myset.pop()

随机删除并返回myset中的一个元素,如果myset为空则报错

len(myset)

计算集合myset的元素个数

myset.clear()

清空集合myset中的所有元素

x in myset

判断x是否在集合myset中

计算交集

方式1:newset = myset1.intersection(myset2,myset3….)

方式2:newset = myset1&myset2&myset3….

计算并集

方式1:newset = myset1.union(myset2,myset3…)

方式2:newset = myset1|myset2|myset3

计算差集

方式1:newset = myset1.difference(myset2)

方式2:newset = myset1-myset2

逻辑运算

集合之间可以使用>,>=,<,<=,==,!=进行逻辑判断

2.2、利用集合去重

集合是唯一元素的聚集,列表或元组需要去重时,可以将其转化为集合set

例如:

mylsit =[1,2,3,4,1,2]

myset= set(mylist)

mylist = list(myset)