遍历枚举列表 - 如何跳过数字?
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 条件中缩进打印,这样您就不会看到双重输出
或使用列表组合并打印:
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
is skipping.
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'的问题
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')
在下面的简单循环示例中,我想通过跳过包含 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 条件中缩进打印,这样您就不会看到双重输出
或使用列表组合并打印:
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
is skipping.
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'的问题
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')