【问题标题】:Python 3.6 Create mapping from an array with sizesPython 3.6 从具有大小的数组创建映射
【发布时间】:2020-06-30 15:10:00
【问题描述】:

任务

我有一个有大小的数组

sizes = [5, 3, 1, 2]

并根据我要创建以下数组的大小

mapping = [0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]

解决方案

我的第一次尝试

mapping = []
ctr = 0
for i in range(len(sizes)):
    for j in range(sizes[i]):
        mapping.append(i)
        ctr += 1

短版

mapping = [[i for _ in range(sizes[i])] for i in range(len(sizes))]
mapping = list(itertools.chain(*mapping))

问题

单行版本?

是否有可能用简洁的代码在一行中完成?

【问题讨论】:

    标签: python python-3.x mapping python-3.6


    【解决方案1】:

    使用enumerate

    例如:

    sizes = [5, 3, 1, 2]
    result = [i for i, v in enumerate(sizes) for _ in range(v)]
    print(result)
    

    输出:

    [0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]
    

    【讨论】:

      【解决方案2】:

      另一种方法是将索引乘以子列表[[0, 0, 0, 0, 0], [1, 1, 1], [2], [3, 3]] 然后使用itertoo.chain.from_iterable 将结果展平:

      >>> from itertools import chain
      >>> sizes = [5, 3, 1, 2]
      >>> list(chain.from_iterable([i] * x for i, x in enumerate(sizes)))
      [0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 2022-07-22
        • 2021-01-13
        • 2018-08-29
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        相关资源
        最近更新 更多