實際問題有哪些?
- 過濾掉列表[3,9,-1,10.-2......] 中負數
- 篩選出字典{‘li_ming’:90,’xiao_hong’:60,’li_kang’:95,’bei_men’:98} 中值高於90的項
- 篩選出集合{3,9,-1,10.-2......]中能被3整除的數
問題1如何解決?
最普通方法:
#!/usr/bin/python3
def filter_l(data):
res = []
for i in data:
if i > 0:
res.append(i)
return res
if __name__ == '__main__':
data = [3, 9, -1, 10, -2]
new_l = filter_l(data)
print(new_l)
如何解決列表問題?
初始化列表: 生成 -10 到 10 的隨機數列表,去除負數
1. filter方法:
#!/usr/bin/python3
from random import randint
def filter_l(data):
# 循環data列表,把值一個一個取出 交個lambda中x,如何lambda函數為True,返回x生成一個新的filter對象
return filter(lambda x: x >= 0, data)
if __name__ == '__main__':
# 列表生成10個 -10 到 10 的隨機數
data = [randint(-10, 10) for _ in range(10)]
print(data)
# new_l 為可迭代對象
new_l = filter_l(data)
print(list(new_l), type(new_l))
2. 列表解析:
#!/usr/bin/python3
from random import randint
def filter_l(data):
# 循環data列表,把值一個一個取出 是否滿足if條件,滿足True返回x生成一個新列表
return [x for x in data if x >=0 ]
if __name__ == '__main__':
# 列表生成10個 -10 到 10 的隨機數
data = [randint(-10, 10) for _ in range(10)]
print(data)
# new_l 為可迭代對象
new_l = filter_l(data)
print(list(new_l), type(new_l))
運行速度比較:解析 > filter > 普通
如何解決字典?
字典解析,篩選數據:
#!/usr/bin/python3
from random import randint
def filter_l(data):
print(data.items())
# 把字典轉換成dict_items,循環里面的key和value,滿足if條件返回對應的key和value值
return {k: v for k, v in data.items() if v > 90}
if __name__ == '__main__':
# 字典生成式
data = {x: randint(0, 100) for x in range(10)}
print(data)
new_l = filter_l(data)
print(new_l, type(new_l))
如何解決集合問題?
#!/usr/bin/python3
from random import randint
def filter_l(data):
# 迭代集合中值,滿足條件為True返回x
return {x for x in data if x % 3 == 0}
if __name__ == '__main__':
# 集合生成式
data = {randint(0, 100) for x in range(10)}
print(data)
new_l = filter_l(data)
print(new_l, type(new_l))
邏輯整理
無論是解析器還是普通方法,都需要for循環,if判斷,邏輯都是滿足條件返回值,過濾出滿足條件的值,無論是生成器還是解析器都滿足這個格式:“ 返回值 for循環 if判斷 “,通過lambda滿足格 式:“lambda 輸入值:條件, 格式化數據
北門吹雪: https://www.cnblogs.com/2bjiujiu/
