写点什么

Python 代码阅读(第 17 篇):列表元素按位合并

用户头像
Felix
关注
发布于: 14 小时前
Python代码阅读(第17篇):列表元素按位合并

本篇阅读的代码实现了多个列表按照元素的位置依序合并成一个新的嵌套列表。每个子列表都是原列表对应位置的元素。zip()itertools.zip_longest()提供了类似于这段代码的功能。


本篇阅读的代码片段来自于30-seconds-of-python

merge

def merge(*args, fill_value=None):  max_length = max([len(lst) for lst in args])  result = []  for i in range(max_length):    result.append([      args[k][i] if i < len(args[k]) else fill_value for k in range(len(args))    ])  return result
# EXAMPLESmerge(['a', 'b'], [1, 2], [True, False]) # [['a', 1, True], ['b', 2, False]]merge(['a'], [1, 2], [True, False]) # [['a', 1, True], [None, 2, False]]merge(['a'], [1, 2], [True, False], fill_value = '_') # [['a', 1, True], ['_', 2, False]]
复制代码


merge函数接收多个列表和一个填充值fill_value,返回一个嵌套列表。该嵌套列表的元素个数等于最长的输入列表的长度,每个子列表的元素依次来自于输入列表的相同位置,输入列表的元素不足的情况下,使用填充值代替。也就是说merge_list[0]是一个列表,其中的元素依次为输入列表索引为0的元素。


函数使用max结合 list comprehension 得到参数中最长的列表的长度。结合使用range()max_length变量来循环。如果一个列表的长度短于max_length,则剩余的项目使用fill_value(默认为 None)来进行填充。


函数调用同时使用了“关键字参数”和“可变参数”的方式。在第 9 篇的时候介绍了单独使用“可变参数”调用的方式。一般来说,这些“可变参数”将在形式参数列表的末尾,因为它们收集传递给函数的所有剩余输入参数。出现在*args参数之后的任何形式参数都是“仅限关键字参数”。

发布于: 14 小时前阅读数: 3
用户头像

Felix

关注

还未添加个人签名 2018.05.04 加入

欢迎关注个人公众号:没看点 个人主页:www.zhangfelix.com

评论

发布
暂无评论
Python代码阅读(第17篇):列表元素按位合并