在循环中跳过一组值(在数组中) - Python3

Posted

技术标签:

【中文标题】在循环中跳过一组值(在数组中) - Python3【英文标题】:Skip over a set of values (in an array) in a loop - Python3 【发布时间】:2019-02-03 10:58:47 【问题描述】:

我有一个循环读取数据,但编号不连续。因此,我想跳过特定的值。但我只知道如何跳过一个,而不是一组值。 这是我的示例代码:

for n in [x for x in range(2,m) if x!=9]:
    if n < 10:
        stationsnr = '00'+np.str(n)
    elif n < 100:
        stationsnr = '0'+np.str(n)
    else:
        stationsnr = np.str(n)

但我需要的不是“x!= 9”,而是 if x!= 其中一个值 [9,10,12,16,......] (编辑:这些值存储在列表中)。有什么建议吗?

【问题讨论】:

这些值是否在列表中? ***.com/questions/10149747/and-or-in-python 看看这个答案 大概for循环中的列表理解只是一个例子?我不会在那里使用列表理解,因为它首先会创建一个完整的列表;至少使用生成器表达式:for n in (x for x in range(2, m) if x != 9): @ThatBird 那是我的计划。 你使用np.str而不是直接调用str构造函数有什么原因吗?顺便说一句,您可以在不使用if...elif...else 的情况下进行填充。请参阅str.zfillstr.rjust 【参考方案1】:

您可以测试该值是否是集合的成员:

[... if x not in 9, 10, 12, 16, ]

设置成员资格测试是 O(1) 恒定时间(所以!)。

【讨论】:

【参考方案2】:

您可以在 for 循环中使用 enumerate() 函数。它像正常一样返回列表的元素,但也返回索引位置。例如:

indices_to_avoid = [1,4,6]  # indices to skip over
for item, idx in enumerate(range(2, m)):
    if idx not in indices_to_avoid:
        do_something()

就像上面的答案所说,您也可以使用列表推导,但如果您的排除列表很长,列表推导可能会变得很长。我认为冗长的列表推导难以阅读,并且比简单的 for 循环更容易混淆,尤其是当列表组合进入下一行时。

【讨论】:

【参考方案3】:

你可以使用 -

if x is not in [your list]

但是使用set 比使用列表更好,因为在集合上的查找时间是 O(1),这是恒定的,因为它们是散列的。

所以你的代码可以变成 -

if x is not in (your set)

另外,list 的追加时间是 O(N),而 set 的追加时间是 O(1),因此插入到集合中也会更快(并且也可以从中删除)

【讨论】:

以上是关于在循环中跳过一组值(在数组中) - Python3的主要内容,如果未能解决你的问题,请参考以下文章

为啥 .setValue() 在 for 循环中跳过列?

如何在循环中跳过项目

Scanf 在循环中跳过(Hangman)

使用 CSV 文件在循环中跳过第一行(字段)? [复制]

如何在 ddd (gdb) 中跳过过去的循环

R:使用 tryCatch() 在循环中跳过请求失败 [500] 错误失败