2016-01-26 79 views

回答

6

问题是,我怀疑,在如何返回和解释函数的结果。如果存在匹配,则该函数返回一个元组,但如果不是,则返回一个元组-1。你可能解压功能的结果,如果没有匹配,你得到这个错误:解决它会返回-1, -1元组,而不是仅仅-1

>>> def collision2(tab1,tab2): 
...  for i in range(len(tab1)): 
...   for j in range(len(tab2)): 
...    if (tab1[i]==tab2[j]): 
...     return i,j 
...  return -1 
... 
>>> x, y = collision2([1, 2, 3], [3, 4, 5]) # there is a match, no error 
>>> x, y = collision2([1, 2, 3], [10, 10, 10]) # now, there is no match 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not iterable 

方式一:

def collision2(tab1,tab2): 
    for i in range(len(tab1)): 
     for j in range(len(tab2)): 
      if (tab1[i] == tab2[j]): 
       return i,j 
    return -1, -1 
0

目前您所看到的错误是一个元组解包误差,如果在TAB1没有共同的元素TAB2你只返回-1因此,当你的所有功能:

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

Ÿ没有得到分配一个值,导致一个异常要提高

因此,你可以实现这样的功能:

def collision2(tab1, tab2): 
    for idx1, val1 in enumerate(tab1): 
     for idx2, val2 in enumerate(tab2): 
      if val1 == val2: 
       return idx1, idx2 
    return -1, -1 

有两点需要注意:

  1. 返回-1,-1可防止元组解压错误
  2. 使用enumerate(iterable)返回可迭代索引处的索引和值。这种做法被认为是pythonic。

希望这会有所帮助。