繁体   English   中英

遍历枚举列表 - 如何跳过一个数字?

[英]Looping over an enumerating list - how to skip a number?

在下面的简单循环示例中,我想通过跳过 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的列表?

你有一个缩进问题:

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 条件内缩进打印,所以你看不到双 output

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

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

Output:

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

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

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

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

为了更好地理解,请跟进跳过6b的 output。

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”

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

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

将您的代码更改为:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM