将两个列表的共同元素合二为一

时间:2014-03-17 08:38:39

标签: python

所以我正在尝试编写一个程序,它将两个列表作为输入,然后将常用元素组合到一个新列表中。问题是我的代码不断返回一个空列表。有谁知道我应该写什么来解决这个问题?到目前为止,这是我的代码:

def main():
    a = list(input("Enter list one: "))
    b = list(input("Enter list two: "))
    newlist1 = intersection(a,b)
    print(newlist1)

def intersection(a,b):
    a = []
    b = []
    newlist = [] 

    for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:
                for k in range(len(newlist)):
                    if newlist[k] != a[i]:
                         newlist.append(a[i])

    return newlist
main()

编辑:感谢评论家伙。我已经编辑了一些部分并对其进行了更改,但仍在进行中。我只需要确保列表输入中的逗号被忽略。这是我到目前为止所做的:

def main():
    a = list(input("Enter list one: "))
    b = list(input("Enter list two: "))
    for i in a:
        a[i]=int(a[i])
    for i in b:
        b[i]=int(b[i])
    newlist1 = intersection(a,b)
    print(newlist1)

def intersection(a,b):
    newlist = [0] 

    for i in a:
        for j in b:
            if a[i] == b[j]:
                for k in newlist:
                    if k != a[i]:
                        newlist.append(a[i])
                    else:
                        continue

    return newlist

2 个答案:

答案 0 :(得分:0)

for k in range(len(newlist)): len(newlist)始终为0

你想要这个

 for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:

                already_added = False
                for k in range(len(newlist)):
                    if newlist[k] == a[i]:
                         already_added = True
                         break

                if not already_added:
                    newlist.append(a[i])

尽管如此,这是一种相当单一的方式。为什么不使用一套?

icedtrees也是正确的......这是另一个问题。您可以通过删除两项作业a = []b = []来修复icedtrees问题。这些行会覆盖传递给函数的参数值,并丢弃您传递给它的任何信息。

答案 1 :(得分:0)

您也可以使用可能更合适的集合。

a = list()
b = list()

set_a = set(a)
set_b = set(b)

intersection = set_a.intersection(set_b)   # you have to convert to sets

intersection_list = list(intersection)     # convert back to list if you need it

请注意,这并未对订购提供任何保证,而且多个副本中的项目只会被复制一次。订购和倍数都是您必须仔细考虑的事情。