【发布时间】:2018-11-08 10:20:08
【问题描述】:
假设我有以下numpy 数组:
arr = numpy.array([[1, 7], [2, 0], [2, 1], [2, 3], [3, 4], [3, 5], [5, 6]])
假设我选择了一个特定的键,在本例中为 2。然后我希望排序如下:
arr_sorted = [[2, 0], [2, 1], [2, 3], [1, 7], [3, 4], [3, 5], [5, 6]]
这个想法是首先从所有key为2的元素开始,然后去那些key是前一个key的值的条目。
从 2 开始,条目为 [2, 0], [2, 1], [2, 3]。因此,2 之后的下一个键将是 0、1、3。没有以 0 作为键的条目。以 1 为键的条目有一个:[1, 7]。有两个条目以 3 为键:[3, 4], [3, 5]。下一个未处理的键是7,但它没有条目。 4 也是如此。有一个条目以 5 为键:[5, 6]。 6 没有条目。
是否有任何numpy 或dictionary 技巧来实现这一点?
我最近的尝试如下:
def bfs_finder(d, start):
queue = deque([start])
seen = [start]
results = []
while queue:
_vertices = queue.popleft()
current = [i for i, a in enumerate(d) if len([x for x in a if x in _vertices])==1 and i not in seen]
curr1 = [a[1] for i, a in enumerate(d) if len([x for x in a if x in _vertices]) == 1 and i not in seen]
if len(current)>0:
results.extend(curr1)
queue.extend(curr1)
seen.extend(current)
return results
但是,我实际上收到了current = [i for i, a in enumerate(d) if len([x for x in a if x in _vertices])==1 and i not in seen]
TypeError: argument of type 'int' is not iterable 的错误。任何有关如何修复此错误的建议,以及是否有任何好的改进,我们将不胜感激。
【问题讨论】:
-
我不太明白你是怎么得到
arr_sorted的。 -
请做一些额外的解释和/或提供更多输入和所需输出的示例。另外,请展示一种不太有效的排序方式,您自己已经找到并实施了这种方式。
-
@Tai 我已经添加了更多解释。
-
7 是怎么出现的?
-
在您的示例中,是什么决定了
[2, 0], [2, 1], [2, 3]的顺序?他们是按照他们开始的顺序离开的吗?它们是按子 ID 排序的吗?
标签: arrays list sorting numpy dictionary