Python:访问数组/列表第一个元素,数据类型为 Z3
Python: accessing array's / list's first element, with Z3 datatypes
在Python(协作)中,我有以下变量c
:
array([x_1 > 1000, y_1 < x_1 + 1], dtype=object)
其中 x_1 > 1000
和 y_1 < x_1 + 1
是 z3 (py) 变量/谓词。我想完全访问它的 'first element': 数组/列表 [x_1 > 1000, y_1 < x_1 + 1]
,但我没有能力。
这些是我所做的尝试:
c[0]
产生 x_1 > 1000
(当然,c[1]
产生
y_1 < x_1 + 1
).
a, b = c
再次产生 a
为 x_1 > 1000
和
b
变为 y_1 < x_1 + 1
.
c.0
产生错误(显然,c.1
也是如此)。
我想访问数组的那个元素的原因是我想以自动方式执行以下 z3 计算:
And([x_1 > 1000, y_1 < x_1 + 1])
。所以制作类似 And(c[0])
.
的东西会很好
这可能是初学者的错误,但我看不到。有帮助吗?
编辑:
请注意,询问 And(c[0])
的问题是我正在做 And(x_1 > 1000)
,而我想执行:And(x_1 > 1000, y_1 < x_1 + 1)
(即,显然 And(c[0],c[1])
.
最好 post 完整的代码段,即那些可以被读者加载和执行而无需填充缺失部分的代码段。否则真的很难 replicate/understand 你想做什么以及你遇到了什么错误。
我不使用 collab(不确定它是什么),但是如果 c
是一个列表,您可以使用 *
符号将其内容转换为参数。像这样:
from z3 import *
x_1, y_1 = Ints('x_1 y_1')
c = [x_1 > 1000, y_1 < x_1 + 1]
s = Solver()
s.add(And(*c))
print(s.sexpr())
这会打印:
(declare-fun x_1 () Int)
(declare-fun y_1 () Int)
(assert (and (> x_1 1000) (< y_1 (+ x_1 1))))
无论您在列表中有多少元素,这都会正常工作 c
。请注意,这与 z3 无关,但它是一个 Python 成语。
我不确定你的 array
构造;但如果它可以变成一个列表,上面的技巧应该有效。这是您要找的吗?
在Python(协作)中,我有以下变量c
:
array([x_1 > 1000, y_1 < x_1 + 1], dtype=object)
其中 x_1 > 1000
和 y_1 < x_1 + 1
是 z3 (py) 变量/谓词。我想完全访问它的 'first element': 数组/列表 [x_1 > 1000, y_1 < x_1 + 1]
,但我没有能力。
这些是我所做的尝试:
c[0]
产生x_1 > 1000
(当然,c[1]
产生y_1 < x_1 + 1
).a, b = c
再次产生a
为x_1 > 1000
和b
变为y_1 < x_1 + 1
.c.0
产生错误(显然,c.1
也是如此)。
我想访问数组的那个元素的原因是我想以自动方式执行以下 z3 计算:
And([x_1 > 1000, y_1 < x_1 + 1])
。所以制作类似 And(c[0])
.
这可能是初学者的错误,但我看不到。有帮助吗?
编辑:
请注意,询问 And(c[0])
的问题是我正在做 And(x_1 > 1000)
,而我想执行:And(x_1 > 1000, y_1 < x_1 + 1)
(即,显然 And(c[0],c[1])
.
最好 post 完整的代码段,即那些可以被读者加载和执行而无需填充缺失部分的代码段。否则真的很难 replicate/understand 你想做什么以及你遇到了什么错误。
我不使用 collab(不确定它是什么),但是如果 c
是一个列表,您可以使用 *
符号将其内容转换为参数。像这样:
from z3 import *
x_1, y_1 = Ints('x_1 y_1')
c = [x_1 > 1000, y_1 < x_1 + 1]
s = Solver()
s.add(And(*c))
print(s.sexpr())
这会打印:
(declare-fun x_1 () Int)
(declare-fun y_1 () Int)
(assert (and (> x_1 1000) (< y_1 (+ x_1 1))))
无论您在列表中有多少元素,这都会正常工作 c
。请注意,这与 z3 无关,但它是一个 Python 成语。
我不确定你的 array
构造;但如果它可以变成一个列表,上面的技巧应该有效。这是您要找的吗?