常用的几个内置函数介绍(附带习题练习)

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}]

 

 

           

原文地址:https://www.cnblogs.com/ltk-python/p/9230429.html