2016-03-15 98 views
-2

代码应该做的是将两个整数列表(列表a和列表b)作为输入并返回第二个列表(列表b)的子集,它们是以第一个列表(列表a)中的一个整数为单位。到目前为止,我有这样的:将一个列表与另一个列表进行比较并创建一个子集列表

def omssa(a,b): 
new=[] 
for x in b: 
    boolean=True 
    while(boolean==True): 
     for char1 in a: 
      if(b[x]== a[char1]): 
       new.append(b[x]) 
       boolean=False 
      elif(b[x]==(a[char1]+1)): 
       new.append(b[x]) 
       boolean=False 
      elif(b[x]==(a[char1]-1)): 
       new.append(b[x]) 
       boolean=False 
     boolean=False 
return new 

但是我在第7行得到一个列表索引超出范围的错误:如果(B [X] == A [CHAR1]): 有没有一种方法来检查作为指数法这个函数继续?谢谢!

回答

0

当您编写for char1 in a时,char1是列表中的实际值,而不是索引。所以你不能使用a[char1]。参见enumerate(),或者可能重复使用range()

0

如果您的列表中不包含相同的int多个时间,则应该使用set对象而不是list。如:

def omssa(a,b): 
    b2 = set(b) 
    return b2.intersect(a) 
相关问题