【问题标题】:for i,j in a,b: TypeError: 'NoneType' object is not iterablefor i,j in a,b: TypeError: 'NoneType' object is not iterable
【发布时间】:2020-05-07 19:10:30
【问题描述】:
def missing_array(a,b):
    a=a.sort()
    b=b.sort()

    for i,j in a,b:
        if i!=j:
            return i

    return a[-1]

missing_array([1,2,3,4,5,6],[1,2,4,5,6])

为什么会出现这个错误

TypeError                                 Traceback (most recent call last)
<ipython-input-3-7c1f70dbb9ae> in <module>
      9     return a[-1]
     10 
---> 11 missing_array([1,2,3,4,5,6],[1,2,4,5,6])
     12 

<ipython-input-3-7c1f70dbb9ae> in missing_array(a, b)
      3     b=b.sort()
      4 
----> 5     for i,j in a,b:
      6         if i!=j:
      7             return i

TypeError: cannot unpack non-iterable NoneType object

【问题讨论】:

  • 列表上的.sort() 方法不返回任何内容 - 它不需要,您显然已经有了列表,以便在其上调用排序方法.
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及重现它所需的最短代码在问题本身。没有明确问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example.
  • .sort() 返回None。在您的情况下,a=a.sort();b=b.sort()ab 分配给None。如果您不想就地排序列表,请尝试使用sorted()

标签: python arrays algorithm list data-structures


【解决方案1】:

来自Docs

Python 列表有一个内置的 list.sort() 方法,可以就地修改列表。

就地表示调用此方法将对调用该方法的列表对象进行排序,并且不会返回新列表。 sort() 方法没有返回类型(void 方法);在 Python 中,此类方法仍然返回“无”。

另外,您遍历这两个数组的语法无效。你应该考虑'zip'方法,根据Docs

返回元组的迭代器,其中第 i 个元组包含来自每个参数序列或可迭代对象的第 i 个元素。

所以你的代码应该是:

def missing_array(a,b):
    a.sort()
    b.sort()
    # Iterating over iterator of tuples returned by zip:
    for (i,j) in zip(a,b):
        if i!=j:
            return i
    return a[-1] if len(a) > len(b) else b[-1]

print(missing_array([1,2,3,4,5,6], [1,2,4,5,6]))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多