我在两天内参加了考试,我们是老师的一个例子,但我是Python的新手,我在这方面受到了阻碍
这是问题陈述:
编写一个算法,如果y [1..n]返回两个数组中常见元素的数量,将获得两个整数数组x [1..n]的参数。
def apartine(a,e):
e=1
gasit=False
n=len(a)
i=0
while i<=n and gasit==False:
if a[i]==e:
gasit=True
else:
i=i+1
return gasit
def intersectie(a,b,c):
e=0
k=len(c)
m=len(b)
for i in range(1,m):
if apartine(a,e)==True:
k=k+1
c.append(b[i])
print(c)
return c
a=[1,3,5,7]
b=[2,3,4,6]
c=[]
print intersectie(a,b,c)
我坚持这个。
我需要一些帮助来找出我做错了什么。
答案 0 :(得分:3)
简单的列表理解可以做到这一点:
c=[i for i in a if i in b]
答案 1 :(得分:0)
apartine()
中的一个问题是,a[len(a)]
(a[i]
循环的最后一次运行中的while
)会引发异常。有效索引从0
到len(a)-1
。
e=1
表示apartine()
只会查看1
是否在a
中,而不是通过的内容。
您想致电apartine(a, b[i])
,e
似乎没有任何有意义的价值。
您未使用k
。
在Python中实现整个事情的一种非常简单的方法是:
c = list(set(a) & set(b))
但我认为这不是你想要的。
答案 2 :(得分:0)
如果列表中的位置无关紧要,您可以使用简单的理解列表获取公共元素
commons = [x for x in a if x in b]
如果位置很重要,您可以使用索引
commons = [a[i] for i in range(len(a)) if a[i] == b[i]]
共同的元素数量是此列表的长度
print(len(commmons))
答案 3 :(得分:0)
如果您在遵循列表推导方面遇到困难,那么这里的内容与for循环基本相同:
def intersect(a, b):
"""Return a list of all elements common to a & b
"""
intersection = []
for element in a:
if element in b and element not in intersection:
intersection.append(element)
return intersection
if __name__ == '__main__':
test_pairs = (
([1, 3, 5, 7], [2, 3, 4, 6]),
([3], [1, 2, 3]),
([1, 2, 3], [3]),
([3, 3, 3], [3]),
([3], [3, 3, 3]),
([1, 2, 3], [4, 5, 6])
)
for a, b in test_pairs:
print "Intersection of %s and %s is %s" % (a, b, intersect(a,b))
输出结果为:
Intersection of [1, 3, 5, 7] and [2, 3, 4, 6] is [3]
Intersection of [3] and [1, 2, 3] is [3]
Intersection of [1, 2, 3] and [3] is [3]
Intersection of [3, 3, 3] and [3] is [3]
Intersection of [3] and [3, 3, 3] is [3]
Intersection of [1, 2, 3] and [4, 5, 6] is []
该方法是从一个列表中获取每个元素(它与哪个元素无关),并查看它是否存在于另一个列表中。将这些元素收集在第三个列表中,这是您的结果。如您所见,element not in intersection
子句删除了这些重复项。