1 enumerate:枚举,返回一个枚举对象。
print(enumerate([1,2,3]))#可选开始位置 for i in enumerate([1,2,3]): print(i) for i in enumerate([1,2,3],100): print(i)
2 zip:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
l1 = [1,2,3,] l2 = ['a','b','c',5] l3 = ('*','**',(1,2,3)) for i in zip(l1,l2,l3): print(i) 输出结果: (1, 'a', '*') (2, 'b', '**') (3, 'c', (1, 2, 3))
3.filter:过滤·
# filter 过滤 通过你的函数,过滤一个可迭代对象,返回的是True # 类似于[i for i in range(10) if i > 3] def func(x):return x%2 == 0 ret = filter(func,[1,2,3,4,5,6,7]) # print(ret) for i in ret: print(i) 输出结果: 2 4 6
4.map:会根据提供的函数对指定序列做映射。
def square(x): # 计算平方数 return x ** 2 print(list(map(square, [1, 2, 3, 4, 5]))) # 计算列表各个元素的平方 print(list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))) # 使用 lambda 匿名函数 # 提供了两个列表,对相同位置的列表数据进行相加 print(list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))) 输出结果: [1, 4, 9, 16, 25] [1, 4, 9, 16, 25] [3, 7, 11, 15, 19]
5 sorted:对所有可迭代的对象进行排序操作。
L = [('a', 1), ('c', 3), ('d', 4), ('b', 2), ] sorted(L, key=lambda x: x[1]) # 利用key print(L) students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] sorted(students, key=lambda s: s[2]) # 按年龄排序 print(students) sorted(students, key=lambda s: s[2], reverse=True) # 按降序 print(students) 输出结果: [('a', 1), ('c', 3), ('d', 4), ('b', 2)] [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
一些例题:
1,用map来处理下述l,然后用list得到一个新的列表,列表中每个人的名字都是sb结尾
l=[{'name':'alex'},{'name':'y'}] print(list(map(lambda x:x["name"]+"sb",l))) 输出结果: ['alexsb', 'ysb']
2用filter来处理,得到股票价格大于20的股票名字
shares={ 'IBM':36.6, 'Lenovo':23.2, 'oldboy':21.2, 'ocean':10.2, } print(list(filter(lambda x:shares[x]>20 , shares))) 输出结果: ['IBM', 'Lenovo', 'oldboy']
3 有下面字典,得到购买每只股票的总价格,并放在一个迭代器中。结果list一下[9110.0, 27161.0,......]
portfolio=[{'name':'IBM','shares':100,'price':91.1}, {'name':'AAPL','shares':50,'price':543.22}, {'name':'FB','shares':200,'price':21.09}, {'name':'HPQ','shares':35,'price':31.75}, {'name':'YHOO','shares':45,'price':16.35}, {'name':'ACME','shares':75,'price':115.65}] print(list(map(lambda x:x["shares"]*x["price"],portfolio ))) 输出结果: [9110.0, 27161.0, 4218.0, 1111.25, 735.7500000000001, 8673.75]
4,用filter过滤出上题中单价大于100的股票。
print(list(filter(lambda x:x["price"] >100 , portfolio))) 输出结果: [{'name': 'AAPL', 'shares': 50, 'price': 543.22}, {'name': 'ACME', 'shares': 75, 'price': 115.65}]
5:有如下数据类型:将l1按照列表中的每个字典的values大小进行排序,形成一个新的列表。l1 = [ {'sales_volumn': 0}, {'sales_volumn': 108},
{'sales_volumn': 337}, {'sales_volumn': 475}, {'sales_volumn': 396}, {'sales_volumn': 172}, {'sales_volumn': 9}, {'sales_volumn': 58}, {'sales_volumn': 272}, {'sales_volumn': 456}, {'sales_volumn': 440}, {'sales_volumn': 239}] sorted(l1,key=lambda x:x["sales_volumn"]) print(l1) 结果: [{'sales_volumn': 0}, {'sales_volumn': 108}, {'sales_volumn': 337}, {'sales_volumn': 475}, {'sales_volumn': 396},
{'sales_volumn': 172}, {'sales_volumn': 9}, {'sales_volumn': 58},
{'sales_volumn': 272}, {'sales_volumn': 456}, {'sales_volumn': 440}, {'sales_volumn': 239}]