【问题标题】:Loop Python List : Conditional Value Change循环 Python 列表:条件值更改
【发布时间】:2021-10-09 14:04:52
【问题描述】:

我有一个 python 列表:

my_list = [0,0,0.5,0,0,0,0.4,0,0.6] 

我想用列表中比 0 更高的值替换所有的 0 以获得:

my_list = [0.5,0.5,0.5,0.4,0.4,0.4,0.4,0.6,0.6]

感谢您的帮助!

【问题讨论】:

  • pd.Series(my_list).replace(0, np.nan).bfill().tolist()
  • @It_is_Chris 这不适用于 [0, 0, -8, 0, 6]

标签: python pandas list loops conditional-statements


【解决方案1】:
my_list = [0, 0, 0.5, 0, 0, 0, -8.2, 0.4, 0, 0.6]

hook = 0
for i, v in enumerate(my_list):
    if v > 0:
        for j in range(hook, i):
            if my_list[j] == 0:
                my_list[j] = v
        hook = i + 1
print(my_list)
# [0.5, 0.5, 0.5, 0.4, 0.4, 0.4, -8.2, 0.4, 0.6, 0.6]

Edit2(更短)

my_list = [0, 0, 0.5, 0, 0, 0, -8.2, 0.4, 0, 0.6]

hook, last_index = 0, len(my_list)-1
for i, v in enumerate(reversed(my_list)):
    hook = v if v > 0 else hook
    my_list[last_index - i] = hook if v == 0 else v
print(my_list)
# [0.5, 0.5, 0.5, 0.4, 0.4, 0.4, -8.2, 0.4, 0.6, 0.6]

【讨论】:

    【解决方案2】:

    只需向后迭代列表

    def fill(my_list):
      last = len(my_list)-1
      last_val = my_list[last]
      for kk in range(last-1,-1,-1):
        if my_list[kk] == 0 and last_val > 0:
          my_list[kk] = last_val
        if my_list[kk] > 0:
          last_val = my_list[kk]
      return my_list
    

    >>> fill([0, 0, -8, 0, 6])
    [6, 6, -8, 6, 6]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-14
      • 2019-07-25
      • 2019-01-16
      • 2016-07-21
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2021-05-14
      相关资源
      最近更新 更多