嗨,我有这段代码的错误,我看不到它来自哪里。任何想法 ?'int'对象不可迭代,但是那些是int数组..不只是int
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
嗨,我有这段代码的错误,我看不到它来自哪里。任何想法 ?'int'对象不可迭代,但是那些是int数组..不只是int
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
。你可能解压功能的结果,如果没有匹配,你得到这个错误:解决它会返回-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
目前您所看到的错误是一个元组解包误差,如果在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
有两点需要注意:
enumerate(iterable)
返回可迭代索引处的索引和值。这种做法被认为是pythonic。希望这会有所帮助。