python数据处理中一些常用的函数

目录

      • enumerate()
      • filter()
      • lambda
      • [i for i in range(1,10)] 列表解析
      • sorted()

enumerate()

enumerate 意为枚举、列举。对于一个可迭代的对象,enumerate 将它变成一个索引序列,返回一个枚举类型的对象。

seq = ['one', 'two', 'three', 127]
s1 = list(enumerate(seq))
s2 = list(enumerate(seq, start=1))
print(s1)
print(s2)
# 输出结果
[(0, 'one'), (1, 'two'), (2, 'three'), (3, 127)]
[(1, 'one'), (2, 'two'), (3, 'three'), (4, 127)]

filter()

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

filter(function, iterable)

# function -- 判断函数。
# iterable -- 可迭代对象。

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

def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)
[1, 3, 5, 7, 9]

lambda

匿名函数 lambda 可以接收任意多个参数 (包括可选参数) ,并且返回单个表达式的值。

  1. 将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
sum = lambda x, y: x + y
print(sum(1, 2))
3
  1. 将lambda函数作为参数传递给其他函数,部分Python内置函数接收函数作为参数。
s = list(filter(lambda x: x%2,range(10)))
print(s)
# 此时lambda函数用于指定过滤列表元素的条件。
[1, 3, 5, 7, 9]
  1. 将lambda函数作为其他函数的返回值,返回给调用者。
return lambda x, y: x+y
  1. 将 lambda 函数赋值给其他函数,从而将其他函数用该 lambda 函数替换。

例如,为了把标准库time中的函数sleep的功能屏蔽(Mock),我们可以在程序初始化时调用:time.sleep=lambda x:None。这样,在后续代码中调用time库的sleep函数将不会执行原有的功能。例如,执行time.sleep(3)时,程序不会休眠3秒钟,而是什么都不做。

  1. 将if…else语句缩减为单一的条件表达式。
s = lambda x: "yes" if x == 1 else "no"

print(s(0))

print(s(1))
no
yes

[i for i in range(1,10)] 列表解析

列表解析式是将一个列表(实际上适用于任何可迭代对象)转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。

每个列表解析式都可以重写为 for 循环,但不是每个 for 循环都能重写为列表解析式,列表解析比 for 更精简,运行更快。

  1. 列表解析式
l1 = [i * 2 for i in range(10)]
print(l1)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
  1. 筛选条件
l1 = [i * 2 for i in range(10) if i*2 > 10]
print(l1)
[12, 14, 16, 18]
  1. 嵌套循环
l1 = ['A', 'B', 'C']
l2 = ['1', '2', '3']
l3 = [(m, n) for m in l1 for n in l2]
print(l3)
[('A', '1'), ('A', '2'), ('A', '3'), ('B', '1'), ('B', '2'), ('B', '3'), ('C', '1'), ('C', '2'), ('C', '3')]
  1. 字典解析式
a = {'language1': 'python', 'language2': 'java', 'language3': 'c'}
b = {key: value for key, value in a.items() if key == 'language1'}
print(b)
{'language1': 'python'}
  1. 集合解析式
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = {i for i in a if i > 5}
print(b)
{6, 7, 8, 9, 10}

sorted()

函数对所有可迭代的对象进行排序操作。

sort 与 sorted 的区别
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。
list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

sorted(iterable, key=None, reverse=False)


# 参数说明
# iterable -- 可迭代对象。
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
# reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

常规

print(sorted([5, 7, 6, 3, 4, 1, 2]))
[1, 2, 3, 4, 5, 6, 7]

接收一个key函数来实现自定义的排序,例如按绝对值大小排序。

print(sorted([36, 5, -12, 9, -21], key=abs))
[5, 9, -12, -21, 36]

字符串排序

print(sorted(['bob', 'about', 'Zoo', 'Credit']))
['Credit', 'Zoo', 'about', 'bob']

# 默认情况下,对字符串排序,是按照ASCII的大小比较的,由于'Z' < 'a',结果,大写字母Z会排在小写字母a的前面。

key函数把字符串映射为忽略大小写排序

# 实际上就是先把字符串都变成大写(或者都变成小写),再比较。
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower))
['about', 'bob', 'Credit', 'Zoo']

你可能感兴趣的