将两个列表的共同元素合并为一个
我正在尝试写一个程序,它可以接收两个列表作为输入,然后把两个列表中相同的元素合并到一个新的列表里。问题是我的代码总是返回一个空列表。有没有人知道我该怎么写才能修复这个问题?这是我目前的代码:
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
需要注意的是,这种方式并不能保证顺序,而且如果有重复的项目,只会复制一次。无论如何,顺序和重复的情况都是你需要仔细考虑的事情。