Python向量中的新功能需要建议

时间:2016-01-26 12:41:35

标签: python

我在两天内参加了考试,我们是老师的一个例子,但我是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)

我坚持这个。

我需要一些帮助来找出我做错了什么。

4 个答案:

答案 0 :(得分:3)

简单的列表理解可以做到这一点:

c=[i for i in a if i in b]

答案 1 :(得分:0)

apartine()中的一个问题是,a[len(a)]a[i]循环的最后一次运行中的while)会引发异常。有效索引从0len(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子句删除了这些重复项。