代码之家  ›  专栏  ›  技术社区  ›  Deivid

从另一个列表创建新列表,并通过重复来填充缺失的值

  •  0
  • Deivid  · 技术社区  · 2 年前

    我有两个列表,一个包含工作日,另一个包含与工作日对应的费用:

    wd = [1, 4, 5, 6]
    fees = [1.44, 1.17, 1.21, 1.26]
    

    我需要第三份列出所有工作日的清单,用前一天的费用填写没有费用的工作日的费用:

    result = [1.44, 1.44, 1.44, 1.17, 1.21, 1.26]
    correspDay = [1, 2, 3, 4, 5, 6]
    

    我该如何编写代码?

    4 回复  |  直到 2 年前
        1
  •  3
  •   Samwise    2 年前

    我会先建立一本字典,以便按日查询费用:

    >>> wd = [1,4,5,6]
    >>> fees = [1.44, 1.17, 1.21, 1.26]
    >>> fee_dict = dict(zip(wd, fees))
    

    然后建造 correspDay 用一个简单的 range :

    >>> correspDay = list(range(1, 7))
    

    建造 result 通过迭代 记者日 ,使用 fee_dict 查找费用并在 费迪克特 结果是空的:

    >>> result = []
    >>> for i in correspDay:
    ...     result.append(fee_dict.get(i) or result[-1])
    ...
    >>> result
    [1.44, 1.44, 1.44, 1.17, 1.21, 1.26]
    
        2
  •  2
  •   Cai Allin    2 年前

    我会把这些值放到字典里,然后循环一周中的几天(1-7天),检查我们是否已经有了那一天的值。如果你那天确实有价值,那就把它储存起来,以防第二天没有价值。如果没有值,则在字典中创建一个条目,其中包含当天的密钥和最后一笔费用的值。
    最后,我对列表进行了排序,但除了让输出更易于阅读之外,没有真正的理由这样做

    fees_dict = {1: 1.44, 4: 1.17, 5: 1.21, 6: 1.26}
    last_fee = 0
    for i in range(1, 8):
        if i in fees_dict:
            last_fee = fees_dict[i]
        else:
            fees_dict[i] = last_fee
    
    sorted_fees_dict = dict(sorted(fees_dict.items()))
    print(sorted_fees_dict)
    
        3
  •  0
  •   devpa    2 年前

    feeMap 地图 days fee 这是必须支付的 prev 用于存储以前的值(费用)。

    #!/usr/bin/env python3.10
    
    wd = [1,4,5,6]
    fees = [1.44, 1.17, 1.21, 1.26]
    
    corresDay = list(range(1, 6))
    
    feeMap = dict()
    index = 0
    
    for index, day in enumerate(wd):
        feeMap[day] = fees[index]
    
    prev = None
    for day in range(1, 6):
        if day not in feeMap.keys():
            feeMap[day] = prev
        else:
            prev = feeMap[day]
    feeMap = sorted(feeMap.items())
    
    print(feeMap)
    

    输出:

    $ ./working_days.py 
    [(1, 1.44), (2, 1.44), (3, 1.44), (4, 1.17), (5, 1.21), (6, 1.26)]
    
        4
  •  0
  •   Sultan Al-otaibi    2 年前

    我什么都没做,我看到了上面的好人,我试图让你们更清楚。

    wd = [1,4,5,6]
    fees = [1.44, 1.17, 1.21, 1.26]
    fee_dict = dict(zip(wd, fees))
    correspDay = list(range(1,8))
    result = []
    for i in correspDay:
        result.append(fee_dict.get(i) or result[-1])
    

    我只是添加这一行,以便在字典中输出

    result = dict(zip(correspDay, result))
    

    输出:

    {1: 1.44, 2: 1.44, 3: 1.44, 4: 1.17, 5: 1.21, 6: 1.26, 7: 1.26}