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

2024-04-19 07:56:25 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的阵法:

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]}

Tags: 方法链接地方数组arrayfilteredarray1array2
3条回答

您可以使用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

你可以使用两个听写理解这两个。(侧注:“与坐标相连的框”称为列表)

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)

此外,正如pm2ring所评论的,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所证明的,前者返回的timeit值为0.003447920083999634 后者只有0.002893589437007904。虽然现在差别不大,但是当你有3个,4个,或者10个过滤的数组时,数组会变得更大。差别将是巨大的。你知道吗

在这里试试:https://ideone.com/rSvC0i

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]}

相关问题 更多 >