在循环中跳过一组值(在数组中) - 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.zfill
和str.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的主要内容,如果未能解决你的问题,请参考以下文章