1.python3的divmod()内置函数

首先,函数的名字div 表示地板除法 5//2 = 2; mod表示取余数 5%2=1

所以divmod()函数:接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b)

举例子:

def my_divmod(a: int , b: int) -> tuple:
    """Validate divmod() function."""
    return divmod(a, b)


if __name__ == '__main__':
    dm = my_divmod(8, 3)
    print(dm)

 

 

2.itemgetter()函数

①导入

from operator import itemgetter

②用法

itemgetter 用于获取对象的哪些位置的数据,参数即为代表位置的序号值

注意:itemgetter 获取的不是值,而是定义了一个函数,通过该函数作用到目标对象上,取出目标对象对应维度的值

栗子1:获取一维 数据

from operator import itemgetter


# 获取列表的一维数据
a = [1, 2, 3]
b = itemgetter(1)  # 定义一个函数b, 1表示函数b作用的对象的索引为1的值
print(b(a))  # 2

aa = [1, [2, 4, 5], 9]
bb = itemgetter(1, 1)  # 定义函数bb,获取对象的第1个域和第0个的值
print(bb(aa))  # ([2, 4, 5], [2, 4, 5])
print(bb(a))  # (2, 2)

 

栗子2:获取二维 数据

from operator import itemgetter


# 获取列表的二维数据
ls = [[1, 2, 3], [4, 5, 6]]
assert ls[0][1] == 2  # 就是获取的 二维数据

# 下面用itemgetter实现获取列表的二维数据(需要对其中各个子列表进行取数,因为itemgetter的对象是1维对象)
cc = itemgetter(1, 0)
for item in ls:
    result = cc(item)
    print(result)

结果:

(2, 1)
(5, 4)

 

 

3.groupby

①导入 from itertools import groupby

②用法:groupby()函数的有两个参数,第一个是可迭代对象,第二个是key

栗子1:groupby可以将相邻的重复元素挑出来放在一起

for key,group in itertools.groupby('AAAABBBBCCAA'):
    print(key,list(group)


输出如下:
A ['A', 'A', 'A', 'A']
B ['B', 'B', 'B', 'B']
C ['C', 'C']
A ['A', 'A']

 

栗子2:按key分组:

from itertools import groupby


things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]

for key, group in groupby(things, lambda x: x[0]): # things中的每个元祖,按照x[0]来分组,即元祖索引为0的元素是key;每个元祖就是一个group
    for thing in group:
        # print(thing)  # 打印出来的是每个元祖
        print("A %s is a %s." % (thing[1], key))
    print("")
"""
A bear is a animal.
A duck is a animal.

A cactus is a plant.

A speed boat is a vehicle.
A school bus is a vehicle.
"""

 

class_data = [
    ("class_1", "zhangsan", 98),
    ("class_1", "lisi", 93),
    ("class_2", "wanger", 89),
    ("class_2", "zhaowu", 86),
    ("class_3", "zhenliu", 90),
    ("class_4", "huangqi", 94)
]
for key, group in groupby(class_data, key=lambda ix: ix[0]):
    print(key, list(group))

"""
class_1 [('class_1', 'zhangsan', 98), ('class_1', 'lisi', 93)]
class_2 [('class_2', 'wanger', 89), ('class_2', 'zhaowu', 86)]
class_3 [('class_3', 'zhenliu', 90)]
class_4 [('class_4', 'huangqi', 94)]
"""