“int”对象不是iterable,但它们是int的数组。。不仅仅是在

2024-09-30 08:38:19 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我这段代码有个错误,我看不出它是从哪里来的。你知道吗?你知道吗

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

Tags: 代码inforlenreturnifdef错误
2条回答

您当前看到的错误是元组解包错误,如果tab1tab2中没有公共元素,则当您将所有函数设置为:

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

y未被赋值,导致引发异常

因此,您可以实现如下功能:

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)返回iterable的索引和该索引处的值。这种做法被认为是肾盂。你知道吗

希望这有帮助。你知道吗

我猜想,问题在于如何返回和解释函数的结果。如果存在匹配项,则函数返回一个元组,如果不匹配,则返回-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

修复它的一种方法是返回-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, -1

相关问题 更多 >

    热门问题