1.
#如何过滤列表,字典,集合:
'''
1.filter 注意要过滤得到的结果要list类型转换
2.列表解析式
'''
from random import randint
#列表过滤
data=[randint(-10,10) for _ in range(10)]
print(data)
#方法1:filter
filter_data=list(filter(lambda x:x>=0 ,data))
print(filter_data)
#方法2:列表解析式 快于filter
filter_data=[x for x in data if x>=0]
print(filter_data)
#字典筛选
stu_info={x:randint(0,101) for x in range(1,11)}
print(stu_info)
filter_info={k:v for k,v in stu_info.items() if v>90 }
print(filter_info)
#集合筛选
set_date=set(data)
print(set_date)
filer_set={x for x in set_date if x%3==0 }
print(filer_set)
2.
如何为元祖中的每个元素命名,提高可读性:
from collections import namedtuple
stu=('tom',12,'male','5454446@mall.com')
#如果直接用下标获取,可读性下降
#解决方法1:
NAME,AGE,SEX,EMAL=range(4) #分别得到的值是0,1,2,3
print(NAME,AGE,SEX,EMAL) #用大写字母表示常量 python中并没有类似const int之类的常量
#解决方法2:构建一个类namedtuple的子类
#namedtuple 是一个函数,返回tuple的一个子类
#第一个参数是你创建子类的名字 第二个参数是:一系列名字,即每个index的名字
Student=namedtuple('Student',['NAME','AGE','SEX','EMAIL'])
#python中一切皆对象。 这个namedtuple创建的名为Student(等号右边的那个Student) 类也是一个对象,这个对象用Student这个变量表示(等号左边的那个
#构建object
S1=Student(NAME='T',AGE='12',SEX='MALE',EMAIL='EMAIL')
S2=Student('A','12','MALE','EMAIL')
#两种传参方式
print(S1.AGE)
#返回object的参数
3.统计序列元素出现次数
from random import randint
#生成随机列表 肯定会出现重复数字
rand_list=[randint(0,20) for _ in range(30)]
print(rand_list)
#方法1:
#创建一个字典,key为randlist 中的元素,value =0
times_dict=dict.fromkeys(rand_list,0) #!!
print(times_dict)
for x in rand_list:
times_dict[x]+=1
print(times_dict)
#方法2:
from collections import Counter
counter=Counter(rand_list)#Counter 类构造一个实例对象
#构造函数,需要一个sequence
print(counter.most_common(3)) #得到对象中出现前三次的的info
4.根据字典值的大小排序字典
from random import randint
stu={x:randint(0,101) for x in 'abcderf'}
print(stu)
print(sorted(stu))#传入iter可迭代对象排序
#结果:['a', 'b', 'c', 'd', 'e', 'f', 'r'] 没有value了
#方法1:构建元祖 元祖的比较:
'''
(21,'a')>(11,'b')
'''
keys=stu.keys()
values=stu.values()
#得到 stu 字典中的key列表 和value列表
#用zip函数,组装成一个tuple
l=zip(values,keys)
print(sorted((l)))
#结果!:[(22, 'd'), (36, 'e'), (44, 'a'), (47, 'c'), (48, 'r'), (62, 'b'), (70, 'f')]