Python中如何映射长度不同的两个列表以得到指定输出?
Python不等长列表映射解决方案
基础映射实现
直接用标准库itertools下的cycle方法循环短列表元素,和长列表配对即可实现需求,示例代码如下:
from itertools import cycle name = ["Joe Harris", "Susie Carmike"] method = ["Lab"] # 完成两个列表的映射 mapping_res = list(zip(name, cycle(method))) # 按要求格式打印 print(f"{'name':<15} method") for n, m in mapping_res: print(f"{n:<15} {m}")
更优的不等长映射方案
如果后续需要对映射结果做结构化处理,或者需要适配更复杂的不等长匹配规则,推荐用pandas DataFrame实现,无需手动处理循环逻辑,适配性更强:
import pandas as pd name = ["Joe Harris", "Susie Carmike"] method = ["Lab"] # 自动补全短列的元素到和长列长度一致 df = pd.DataFrame({ "name": name, "method": method * len(name) }) # 直接输出规整格式的结果 print(df.to_string(index=False))
如果短列表长度大于1,需要按顺序循环补全到和长列表一致,搭配numpy的tile方法处理更简洁:
import numpy as np import pandas as pd name = ["Joe Harris", "Susie Carmike", "Zhang San", "Li Si"] method = ["Lab", "Online"] # 循环补全短列表到和长列表长度相同 method_padded = np.tile(method, len(name)//len(method) + 1)[:len(name)] df = pd.DataFrame({"name": name, "method": method_padded}) print(df.to_string(index=False))
内容的提问来源于stack exchange,提问作者Kadesia Durham
相关产品推荐
相关产品推荐

