Python 循环枚举列表-如何跳过一个数字?

Python 循环枚举列表-如何跳过一个数字?,python,list,loops,logic,enumerate,Python,List,Loops,Logic,Enumerate,在下面的简单循环示例中,我希望通过跳过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) p

在下面的简单循环示例中,我希望通过跳过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)

相反,我在结果列表中两次获得了条目
“ax\u corr\u 6”
。我不明白为什么6b的条目没有被简单地跳过,而枚举被提升到7。这让我相信我不太明白如何用Python编码这个简单的逻辑。有人能解释为什么会发生这种情况,以及如何获得跳过Q6a的列表吗?

您有缩进问题:

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条件内缩进打印,这样您就看不到双重输出

  • 或者使用列表comp并打印:

    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']

最终需要打印轴命名列表。

将代码更改为:

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)

嗯,您正在尝试打印索引,除非
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

如果我理解正确,你想跳过“6b”

枚举遍历列表,其中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')

我经常否决只投票代码的答案。