我有一个循环读取数据,但是编号不是连续的。因此,我想跳过特定的值。但是我只知道如何跳过一个值,而不是一组值。 这是我的示例代码:
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”。 )。有什么建议吗?
答案 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),因此插入到集合中的速度也会更快(并且从集合中删除)