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

时间:2018-08-28 18:21:47

标签: python python-3.x loops for-loop

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

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,10,12,16,......](编辑:这些值存储在列表中),那么我需要的不是“ x!= 9”。 )。有什么建议吗?

3 个答案:

答案 0 :(得分:5)

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

<h1>
  Total money:
</h1>
<div class="tot" id="tot">
  0
</div>
<br><br><br>
<div class="element">
  <input class=button type=button value="Hire employee" onclick='mowEm()'>
  Click to mow someone's lawn.
  <input class=button type=button value="MOW" onclick='mow()'>
</div>

集合成员资格测试是O(1)恒定时间(因此 fast !)。

答案 1 :(得分:0)

您可以在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循环更容易混淆,尤其是如果列表组合进入下一行。

答案 2 :(得分:0)

您可以使用-

if x is not in [your list]

但是最好使用set而不是列表,因为集合的查找时间是O(1),这是常量,因为它们是经过哈希处理的。

因此您的代码可能会变成-

if x is not in (your set)

此外,列表的追加时间为O(N),集合的追加时间为O(1),因此插入到集合中的速度也会更快(并且从集合中删除)