2016-10-27 71 views
-1

我最近开始使用Python编程,并且编写了一个简单的函数,它需要两个列表并返回一个新的列表,这两个列表重合。但是,当我运行代码时,它返回一个空列表。请帮助:python程序返回空列表

x = [1, 2, 3] 
y = [4, 5, 6] 


def reunion(list_of_numbers1,list_of_numbers2): 
    union_list = list() 
    for i in range(0,len(list_of_numbers1)): 
     if list_of_numbers1[i] in list_of_numbers2 is True: 
      union_list.append(i) 
      del list_of_numbers1[i] 
      del list_of_numbers2[i] 
    return union_list 
z = reunion(x,y) 
print(z) 
+0

请在发布Python代码时准确再现您的缩进。严重缩减的Python代码是无稽之谈。 – khelwood

+1

这段代码显然会返回一个空列表,因为在这两个列表之间没有共享元素(这个代码还有其他一些错误)。 – UnholySheep

+0

此代码的预期输出是什么?因为你是如果语句没有得到处理,因为'i'不在'list_of_numbers2'中,所以没有任何东西会被追加。 – RoadRunner

回答

1

在你的例子中,它应该返回你一个空的列表,因为没有共同的数字。

你想做的事:

for number in list_of_numbers1: 
    if number in list_of_numbers2: 
     union_list.append(number) 

这可能会产生重复。为了避免这些,

for number in list_of_numbers1: 
    if number in list_of_numbers2 and number not in union_list: 
     union_list.append(number) 

不过,我会做这样的

return [number for number in list_of_numbers1 if number in list_of_numbers2] 
+0

或者只是使用内置函数:'return list(set(list_of_numbers1)&set(list_of_numbers2))' – UnholySheep

+0

这是一个非常好的解决方案。 RoadRunner在下面提到它 – kameranis

1

我可以看到你的代码的两个主要问题:在指数第一个列表的元素

  1. i迭代,所以它的那些指标,而不是元素本身,你正在查找第二个列表。

  2. 在Python,删除你遍历列表的元素是有问题的:Python: Removing list element while iterating over list

1

像这样的事情会给你一个良好的开端:

x = [1, 2, 3, 2] 
y = [3, 5, 2, 3] 

def reunion(list1, list2): 
    result = [] 
    for number in list1: 
     if number in list2 and number not in result: 
      result.append(number) 
    return result 

my_list = reunion(x, y) 
print(my_list) 

输出:

[2, 3] 

或者更接近你的代码:

def reunion(list1, list2): 
    result = [] 
    for i in range(0, len(list1)): 
     if list1[i] in list2 and list1[i] not in result: 
      result.append(list1[i]) 
    return result