tuple的功能:
1.tuple是不可变的,具有迭代(iterable)性
2.拆包用法:name,age,height = ('kang',22,179)
3.元组不是绝对不可变的,可对tuple中的列表等进行操作
1.tuple是不可变的,具有迭代(iterable)性
2.拆包用法:name,age,height = ('kang',22,179)
3.元组不是绝对不可变的,可对tuple中的列表等进行操作
4.tuple的immutable的重要性,即不可变性地重要性,可将元组整体作为字典的键
from collections import namedtuple
*other,address = ('kang',22,179,'beijing')#拆包用法
a = ('a',[33,44,55])
a[1].append(66)#不是绝对不可变的
user = ('kang',32,175,'nankang')
user_dict = {}
user_dict[user] = 'lily'#可整体作为字典的键
print(a)
print(other,address)
print(user_dict)
('a', [33, 44, 55, 66]) ['kang', 22, 179] beijing {('kang', 32, 175, 'nankang'): 'lily'}
1.namedtuple的用法
from collections import namedtuple
class Test(object):
def __init__(self,name,age,height):
self.name = name
self.age = age
self.height = height
test = Test('kang',23,173)
print('class result:',test.name,test.age,test.height)
User = namedtuple('user',['name','age','height','edu']) #在此处相当于运用namedtuple创建了一个类User,与Test类达到一样的效果,可方便地添加变量
user_tuple = ('kang',23,173)#将变量信息先储存在元组中
user_dict = {'name':'kang','age':23,'height':173}#将变量信息先储存在字典中
user = User(*user_tuple,'master')#将元组变量放入user中需要用*,这个*即是变量参数中的*,见函数functions(*args,**kwargs)
user2 = User(**user_dict,edu = 'master')#当将字典的信息传入user中时需要用**,且需要指定添加的信息传入到哪个变量,比如edu = 'master'
def functions(*args,**kwargs):
pass
functions('kang',26)#当没有注明传入的变量具体名称时是将参数传入args中
functions(name = 'kang',age = 26)#当注明了传入的变量具体名称时将参数传入kwargs中
print('namedtuple result:',user.name,user.age,user.height,user.edu)
class result: kang 23 173 namedtuple result: kang 23 173 master
2.defaultdict的用法
from collections import defaultdict
user = ['a','b','c','a','c','c','b','a','a','c']
#一般应用defaultdict的字典存储功能进行频数的计算
user_dict = {}#运用字典的形式进行数量的统计
for i in user:
user_dict.setdefault(i,0) #若i不在user_dict中的话则将user_dict[i]设置为0
user_dict[i] += 1
print(user_dict)
default_dict = defaultdict(int)#将一开始的字典运用defaultdict进行处理,其中int指定对象数据类型是int
for j in user:
default_dict[j] += 1#此时不需要再进行字典中键的判断,只需要一行语句进行处理归总,进行频数计算
print(default_dict)
def gen_default():
return {'name':'','nums':0}
test_dict = defaultdict(gen_default)#defaultdict除了可以传入类型,也可以传入自己编辑的函数,但是函数的返回值需要是特定的结构,比如list,dict等
test_dict['group']
{'name': '', 'nums': 0}
3.deque的用法
#deque的用法有点类似于list的用法,只是deque可以双向操作,或称为双端队列
#deque是线程安全的,liist不是线程安全的
from collections import deque
test_list = deque(['a','b'])
test_list.appendleft('c')
print(test_list)
deque(['c', 'a', 'b'])
4.counter的用法
from collections import Counter
user = ['a','b','c','a','c','c','b','a','a','c']
user_count = Counter('abcjdhegjasdhdhfjdfbs')
user_count.update('egja')#可以将新的数据传入
user_count.most_common(2)#将两个频数最大的项目输出
[('j', 4), ('d', 4)]
5.ordereddict的用法¶
from collections import OrderedDict #ordereddict按照输入的顺序进行排序
user_dict = OrderedDict()
user_dict['a'] = 'user1'
user_dict['c'] = 'user3'
user_dict['b'] = 'user2'
user_dict.move_to_end('a')
print(user_dict.popitem())
user_dict
('a', 'user1')
OrderedDict([('c', 'user3'), ('b', 'user2')])
6.ChainMap的用法
from collections import ChainMap #相当于是字典的连接
a_dict = {'a':'name','b':'age'}
b_dict = {'c':'sex','d':'edu'}
new_dict = ChainMap(a_dict,b_dict)
for i,name in new_dict.items():
print(i,name)
new_dict.maps
b age d edu c sex a name
[{'a': 'name', 'b': 'age'}, {'c': 'sex', 'd': 'edu'}]