【问题标题】:Skipping through one iteration of a loop跳过循环的一次迭代
【发布时间】:2018-07-12 15:42:12
【问题描述】:

假设我有一个清单:

lis = [4, 8, 2, 4, 6]

我想遍历列表中的每个值并将其加倍,但如果遇到数字 2,则在将其加倍后,我应该跳过下一个数字,然后仅将 on 加倍。例如,最后我的列表应该是这样的。

lis = [8, 16, 4, 4, 12]

这可以通过 for 循环实现吗?

【问题讨论】:

    标签: python list loops


    【解决方案1】:

    该算法归结为您使用什么数字将列表中的项目加倍(1 或 2)。这是我对这个问题的看法:

    lis = [4, 8, 2, 4, 6]
    
    def double_with_my_condition(l, doubler=2):
        for i in l:
            yield i * doubler
    
            if i == 2:
                doubler = 1
                continue
    
            doubler = 2
    
    new_lis = [*double_with_my_condition(lis)]
    
    print(new_lis)
    

    输出:

    [8,16,4,4,12]

    【讨论】:

      【解决方案2】:

      我写了一个非常简单的解决方案,应该很容易理解,因为看起来你是一个初学者

      lis = [4, 8, 2, 4, 6]
      new_lis = []
      i = 0
      while (i < len(lis)):
        new_lis.append(lis[i] * 2)
        if (lis[i] == 2):
          if (i+1 < len(lis)):
              new_lis.append(lis[i+1])
          i = i+1
        i = i+1
      
      print(new_lis)
      

      这将创建一个新列表,遍历旧列表,将翻倍的值附加到新列表中,如果索引处的值为 2,则跳过一个数字。

      【讨论】:

        【解决方案3】:

        这行得通!

        Method-1:
        lis = [4, 8, 2, 4, 6]
        for i in range(len(lis)-1, -1, -1):
            if(lis[i-1] == 2):
                continue
            else:
                lis[i] = lis[i]*2  
        lis
        
        Method-2:
        lis1 = [4, 8, 2, 4, 6]
        indices = [i+1 for i, x in enumerate(lis1) if x == 2]  #Storing indices of next to 2
        lis2 = [i*2 for i in lis1]
        for i in indices:
            lis2[i] = lis1[i]  # replacing the previous values
        
        print(lis2)
        

        【讨论】:

          【解决方案4】:

          你也可以使用列表推导

          lis = [4, 8, 2, 4, 6]
          print([lis[x] if lis[x - 1] == 2 else lis[x] * 2 for x in range(len(lis))])
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-06
            • 2023-03-15
            • 1970-01-01
            • 2019-05-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多