【问题标题】:Looping over an enumerating list - how to skip a number?遍历枚举列表 - 如何跳过一个数字?
【发布时间】:2020-12-11 20:00:05
【问题描述】:

在下面的简单循环示例中,我希望通过跳过 13 个数据列列表中的一个条目,依次得到 12 个轴名称。

question_list=['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6a', 'Q6b', 'Q7', 'Q8','Q9', 'Q10', 'Q11', 'Q12']

for c, z in enumerate(question_list):
    if '6b' not in z:
        axis_names='ax_corr_'+str(c+1)
    print(axis_names)

相反,我在结果列表axis_names 中两次获得条目"ax_corr_6"。我不明白为什么不简单地跳过 6b 的条目并将枚举推进到 7。这​​让我相信我不太明白如何在 Python 中编码这个简单的逻辑。谁能澄清为什么会发生这种情况以及如何实现跳过'Q6a 的列表?

【问题讨论】:

    标签: python list loops logic enumerate


    【解决方案1】:

    好吧,您正在尝试打印索引,除非6b 将被错过匹配。尝试调试并打印Z 它是否真的有效。找到我的代码的输出,会看到6b 正在跳过。

    for c, z in enumerate(question_list):
        if '6b' not in z:
            print('For '+z + ' ax_corr_'+str(c+1))
    

    为了更好地理解,请跟踪跳过6b 的输出。

    For Q1 ax_corr_1
    For Q2 ax_corr_2
    For Q3 ax_corr_3
    For Q4 ax_corr_4
    For Q5 ax_corr_5
    For Q6a ax_corr_6
    For Q7 ax_corr_8
    For Q8 ax_corr_9
    For Q9 ax_corr_10
    For Q10 ax_corr_11
    For Q11 ax_corr_12
    For Q12 ax_corr_13
    

    【讨论】:

      【解决方案2】:

      你有一个缩进问题:

      question_list=['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6a', 'Q6b', 'Q7', 'Q8',
                     'Q9', 'Q10', 'Q11', 'Q12']
      
      for c, z in enumerate(question_list):
          if '6b' not in z:
              # added the z-value to the string for clarity
              axis_names='ax_corr_'+str(c+1)+"_"+z
          print(axis_names)                        # this will print Q6a' once on its turn and
                                                   # once the old value one turn later when the
                                                   # conditional skips the value Q6b 
      

      解决方案:

      • 在 if 条件内缩进打印,这样你就看不到双重输出

      • 或使用列表组合并打印:

        lc = [f"ax_corr_{c}_{z}" for c, z in enumerate(question_list,1)           
             if '6b' not in z]
        print(lc)
        

      输出:

       ['ax_corr_1_Q1',  'ax_corr_2_Q2',   'ax_corr_3_Q3',   'ax_corr_4_Q4', 
        'ax_corr_5_Q5',  'ax_corr_6_Q6a',  'ax_corr_8_Q7',   'ax_corr_9_Q8', 
        'ax_corr_10_Q9', 'ax_corr_11_Q10', 'ax_corr_12_Q11', 'ax_corr_13_Q12']
      

      您最终将需要用于命名轴打印的列表。

      【讨论】:

        【解决方案3】:

        如果我理解的问题你想跳过'6b'

        enumerate 遍历您的列表,其中 c 是索引,z 是索引 c 处的值。 因此您需要比较元素而不是在列表中找到它。所以用“!=”替换“不在”就可以了。

        question_list=['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6a', 'Q6b', 'Q7', 'Q8','Q9', 'Q10', 'Q11', 'Q12']
        
        for c, z in enumerate(question_list):
            if '6b' != z:
                axis_names='ax_corr_'+str(c+1)
            print(axis_names)
        

        也许在迭代之前从列表中删除“6b”会更容易:

        question_list.remove('6b')
        

        【讨论】:

          【解决方案4】:

          将您的代码更改为:

          question_list=['Q1', 'Q2', 'Q3', 'Q4', 'Q5', 'Q6a', 'Q6b', 'Q7', 'Q8','Q9', 'Q10', 'Q11', 'Q12']
          
          for c, z in enumerate(question_list):
              if '6b' not in z:
                  axis_names='ax_corr_'+str(c+1)
                  print(axis_names)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-06-08
            • 1970-01-01
            • 2010-12-12
            • 2011-09-01
            • 2011-04-04
            • 2016-01-10
            相关资源
            最近更新 更多