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

0 投票
2 回答
636 浏览
提问于 2025-04-17 22:38

我正在尝试写一个程序,它可以接收两个列表作为输入,然后把两个列表中相同的元素合并到一个新的列表里。问题是我的代码总是返回一个空列表。有没有人知道我该怎么写才能修复这个问题?这是我目前的代码:

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

你有一段代码 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])

不过,这种写法有点不够“Python风格”。为什么不使用集合呢?

icedtrees 说得对,这也是另一个问题。你可以通过删除这两行代码 a = []b = [] 来解决 icedtrees 的问题。这两行代码会覆盖传递给函数的参数值,把你传入的信息给丢掉了。

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

需要注意的是,这种方式并不能保证顺序,而且如果有重复的项目,只会复制一次。无论如何,顺序和重复的情况都是你需要仔细考虑的事情。

撰写回答