如何在列表、字典、集合中根据条件筛选数据?
先简要介绍 列表、字典、集合的基本形式
实际案例:
- 过滤掉列表[3,4,-1,-5,8,9]中的负数
- 筛选字典{‘lili’:79,‘jim’:88,…}中高于90的项
- 筛选集合{77,89,23,24,…}中可以被3整除的元素
列表解析
import random import randint
a = [randint(-10,10) for i in range(10)]
#a =[-8, -8, -7, -5, -4, -8, -8, 9, 2, 7]
a = [i for i in a if i>0]
#a = [9, 2, 7]
内置函数 filter
filter是过滤器的意思
import random import randint
a = [randint(-10,10) for i in range(10)]
#a =[-8, -8, -7, -5, -4, -8, -8, 9, 2, 7]
list(filter( lambda x:x>0 ,a))
#[9, 2, 7]
以上是针对列表的。
a = set(a)
#{-8, -7, -5, -4, 2, 7, 9}
{i for i in a if i%==0}
#{9}
或者:
a = [ randint(-10,10) for _ in range(10)]
#[3, -7, -6, 3, -7, 9, 2, 6, -1, -2]
set(filter( lambda x:x>0 ,a))
#{2, 3, 6, 9}
以上是针对集合的。可以发现,集合和列表是类似的
字典解析
d = {i:randint(60,100) for i in range(1,20)}
'''{1: 77,
2: 68,
3: 65,
4: 80,
5: 72,
6: 90,
7: 82,
8: 72,
9: 87,
10: 94,
11: 98,
12: 96,
13: 83,
14: 97,
15: 86,
16: 74,
17: 96,
18: 61,
19: 100}'''
{k:v for k,v in d.items() if v>90}
#{3: 91, 10: 95, 19: 97}
实际案例–学生系统中的信息为固定格式(名字,年龄,性别,邮箱)
例子
- (‘Jim’, 16, ‘male’,‘jim2680@gami’)
- (‘KH’, ‘23’, 'fa’male, ‘368312800@163.com’)
方法一 全局变量
或许需要一个类,在这个类中定义全局变量。比如
class Student:
Name,age,sex,email = range(4)
def xx:
pass
也可以用数字枚举,代码如下:
from enum import IntEnum
class StudentEnum(IntEnum):#继承了IntEnum
#定义属性
name = 0
age = 1
sex = 2
email = 3
可以通过StudentEnum.name来调用name的属性
方法二 调用collections中的方法namedtuple
from collections import namedtuple
student = namedtuple('student',['name','age','sex','email'])
s1 = student('jim',13,'male','13344@163.com')
#其中 s1.name = 'jim'