问题描述
我对以下代码示例有疑问。这种编码风格非常先进,我正在尝试获取每一行。我不明白 in_clusters
数组。我认为列表理解在那里使用。元素 current
是数组 current_inds
中的可迭代对象。但是itr in current
在做什么?这些是 2 个 for 循环,还是 1 个 while 循环和 1 个 for 循环。可以用简单的循环来写这种行吗?
clusters = []
current_inds = []
itr = 0
for slope,intercept in zip(slopes,intercepts):
in_clusters = np.array([itr in current for current in current_inds])
if not in_clusters.any():
slope_cluster = np.logical_and(slopes < (slope+slope_similarity_threshold),slopes > (slope-slope_similarity_threshold))
intercept_cluster = np.logical_and(intercepts < (intercept+intercept_similarity_threshold),intercepts > (intercept-intercept_similarity_threshold))
inds = np.argwhere(slope_cluster & intercept_cluster & slopes_horizontal).T
if inds.size:
current_inds.append(inds.flatten())
clusters.append(lines[inds])
itr += 1
merged_lines = [np.mean(cluster,axis=1) for cluster in clusters]
merged_lines = np.array(merged_lines).reshape((-1,4))
解决方法
[itr in current for current in current_inds]
让我们添加几个括号:
[(itr in current) for current in current_inds]
这里的 itr in current
是表达式,它被计算并添加到由理解创建的列表中。其余的理解只是标准的。
相当于:
result = []
for current in current_inds:
if itr in current:
result.append(True)
else:
result.append(False)