有没有办法过滤数组中的坐标

时间:2017-10-12 03:50:42

标签: python dictionary

这是我的阵列:

array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}

有没有人知道将x坐标为0的方法过滤到像这样的单独数组中。

filtered_array1 = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0]}

同样,有没有办法过滤链接到坐标的框,例如当它等于1时;像这样

filtered_array2 = {(0,0):[1], (0,2):[1], (0,4):[1], (1,0):[1], (1,2):[1], (1,4):[1]}

3 个答案:

答案 0 :(得分:2)

你可以对这两个使用两个dict理解。 (旁注:“链接到坐标的框”称为列表)

array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}

filtered_array1 = {k: v for k, v in array.items() if k[0] == 0}
filtered_array2 = {k: v for k, v in array.items() if v[0] == 1}

print(filtered_array1)
print(filtered_array2)

此外,正如PM 2Ring评论的那样,只需构建一个过滤后的数组就可以完成dict理解,但是构建多个数组需要多次迭代原始数组,这使得它效率低下。您可以使用传统的for循环。

array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}

filtered_array1 = {}
filtered_array2 = {}

for k, v in array.items():
    if k[0] == 0:
        filtered_array1[k] = v
    elif k[0] == 1:
        filtered_array2[k] = v

timeit验证,前者返回时间值0.003447920083999634 而后者只有0.002893589437007904。虽然现在没什么区别,但是当你有3个,4个或10个filtered_arrays时,数组变大了。差别很大。

在此处试试:https://ideone.com/rSvC0i

答案 1 :(得分:1)

array = {(0,0):[1], (0,1):[0], (0,2):[1], (0,3):[0], (0,4):[1], (0,5):[0],
(1,0):[1], (1,1):[0], (1,2):[1], (1,3):[0], (1,4):[1], (1,5):[0]}

dict1 = {(k1, k2): v for (k1, k2), v in array.items() if k1 == 0}
print(dict1)
# {(0, 1): [0], (0, 0): [1], (0, 5): [0], (0, 4): [1], (0, 3): [0], (0, 2): [1]}


dict2 = {(k1, k2): v for (k1, k2), v in array.items() if v[0] == 1}
print(dict2)
# {(1, 2): [1], (0, 0): [1], (0, 4): [1], (1, 0): [1], (0, 2): [1], (1, 4): [1]}

答案 2 :(得分:0)

您可以使用dictionary comprehensions

这也是dictionary,而不是list或(numpy)数组。

d = {(0, 0): [1], (0, 1): [0], (0, 2): [1], (0, 3): [0], (0, 4): [1], (0, 5): [0],
 (1, 0): [1], (1, 1): [0], (1, 2): [1], (1, 3): [0], (1, 4): [1], (1, 5): [0]}

result_1 = {k: v for k, v in d.items() if k[0] == 0}
desired_result_1 = {(0, 0): [1], (0, 1): [0], (0, 2): [1], (0, 3): [0], (0, 4): [1],
                (0, 5): [0]}
print(result_1 == desired_result_1)  # prints True

result_2 = {k: v for k, v in d.items() if v[0] == 1}
desired_result_2 = {(0, 0): [1], (0, 2): [1], (0, 4): [1], (1, 0): [1], (1, 2): [1],
                (1, 4): [1]}
print(result_2 == desired_result_2)  # prints True