python高级编程(列表,元组,集合)

2018-06-22  本文已影响0人  原来不语

任务描述:如何在列表、字典、集合中根据条件筛选数据

列表:

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。 

该函数接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

filter(function, iterable)
        function -- 判断函数。
        iterable -- 可迭代对象。

from random import randint
data = [randint(-10, 10) for _ in range(10)]   #利用列表生成式构造一个列表
print(data)
data1 = filter(lambda x: x >=0, data)  #利用filter函数进行条件筛选
print(list(data1))  #输出筛选后的结果

注:
   filter()函数在python2 中直接打印map,filter函数会直接输出结果,返回的是过滤后的列表。
   而python3中返回到是一个filter类,filter类实现了__iter__和__next__方法,
   可以看成是一个迭代器,有惰性运算的特性, 相对python2提升了性能, 可以节约内存.输出前需要
   使用list() 进行显示转换

法二:

from random import randint
data = [randint(-10, 10) for _ in range(10)]
data2 = [x for x in data if x >=0]
print(data2)

链表推导式提供了一个创建链表的简单途径,无需使用 map(), filter() 以及 lambda。
返回链表的定义通常要比创建这些链表更清晰。每一个链表推导式包括在一个for语句之后的表达式,
零或多个for或多个if语句。返回值是由for或if子句之后的表达式得到的元素组成的链表。
如果想要得到一个元组,必须要加上括号。
image.png

字典

任务描述:构建一个字典用于存储学生与成绩,学生编号1-20 成绩为60-100之间的随机值,
然后通过字典解析提取出值大于90的学生的成绩和学号
from random import randint
d = {x: randint(60, 100) for x in range(1,21)}
print(d)
print({k for k in d if k>10})
print({v for v in d.values() if v>90}) 
print({k for k in d.keys() if k>10})
k = {k:v for k, v in d.items() if v > 90}
print(k)
image.png

集合

任务描述:在集合中找出可以被3整除的数!
data = [randint(-10, 10) for _ in range(10)]
s = set(data)
print(s)
s1 = {x for x in s if x % 3 == 0}
print(s1)
image.png
上一篇下一篇

猜你喜欢

热点阅读