我必须解决这个问题:
能否实现函数,并将两个关联向量(在Python中表示为二进制列表)作为参数,并返回这两个向量的补码?
es和(11001110)=1100
所以我有这样的情况:
def AND(vector_a, vector_b):
# insert your code here
# these tests should return True if your code is correct
print(AND([1, 1, 0, 0], [1, 1, 1, 0]) == [1, 1, 0, 0])
print(AND([1, 0, 0, 1, 0, 0, 1], [1, 1, 1, 0, 1, 0, 1]) == [1, 0, 0, 0, 0, 0, 1])
我的解决方案是:
def AND(va,vb):
lista = []
i = 0
while i<len(va):
if va[i] == 1 and vb[i]==1:
lista.append(1)
else:
lista.append(0)
i += 1
return lista
这似乎是可行的,但在接下来的练习中,我遇到了一些问题:
重写函数并允许它采用任意数量的关联向量。
def AND(*vectors):
# insert your code here
# these tests should return True if your code is correct
print(AND([1, 1, 0, 0], [1, 1, 1, 0], [1, 0, 0, 0]) == [1, 0, 0, 0])
print(AND([1, 1, 1, 0, 1], [1, 0, 0, 1, 0], [0, 1, 1, 0, 1]) == [0, 0, 0, 0, 0])
你能帮我解决这个问题吗?谢谢
下面是一个干净的解决方案,隐藏列表理解和生成器表达式中的所有循环:
all
函数检查所有向量的第i
元素是否都是1(或者除0以外的任何值)。它返回True
或False
。我们可以使用int
函数将其转换为1
或0
。你知道吗以下是您如何概括您迄今为止所做的工作:
我建议您使用zip进行这些操作。因此,您可以对任意数量的列表执行此操作。你知道吗
基本上
zip
所做的是,它根据列表中的元素的索引(列)来对其进行zip,您可以将其视为矩阵转置。你知道吗所以a,b,c的压缩版本是
所有需要处理的值都打包在元组中。然后使用
all
对这些项应用and
操作,基本上all
检查容器的所有元素是否都是1
,如果只有一个0
,它返回false
,因此and
就满足了。你知道吗这就回来了
但是你需要整数值,所以
int(all(val))
有关
any
和all
的详细信息:https://docs.python.org/3.4/library/functions.html#any
https://docs.python.org/3.4/library/functions.html#all
相关问题 更多 >
编程相关推荐