【问题标题】:listing the elements given by a function's output列出函数输出给出的元素
【发布时间】:2018-08-27 04:21:25
【问题描述】:

在下面给出的代码中,我编写了两个函数。第二个应用第一个功能。我正在尝试查看是否可以对第一个函数的元素进行迭代。

这是代码:

def numbers(n):
    for m in range(n):
        print(m)

def sets(n):
    r=[]
    for e in numbers(n):
      r.append([e])
    return r

sets(6)

我想要的结果是[[0], [1], [2], [3], [4], [5]]

我知道还有其他方法(不定义函数)来获取从 0 到 m-1 的所有数字,但是对于我开发的实际代码,这与我要解决的问题有关。

我得到的错误信息是:

'NoneType' object is not iterable

【问题讨论】:

  • numbers(n) 没有返回任何内容供 for 循环迭代。
  • 当您提供错误消息时,指明该行很重要。最好的方法是提供堆栈跟踪

标签: python python-3.x list function iterator


【解决方案1】:

您的numbers 函数除了打印输入之外没有对输入做任何事情。不幸的是,打印不会在函数本身之外产生副作用。您有许多可用的修复程序。

最pythonic的是构建一个生成器而不是常规函数:

def numbers(n):
    for m in range(n):
        yield m

或者更简单

def numbers(n):
    yield from range(n)

只要你正确地返回它,预先构造你想要的整个可迭代对象的效率会低得多,但同样有效:

def numbers(n):
    value = []
    for m in range(n):
        value.append(m)
    return value

或更高效:

def numbers(n):
    value = [m for m in range(n)]
    return value

或微不足道

def numbers(n):
    return range(n)

【讨论】:

    【解决方案2】:
    def numbers(n):
        #for m in range(n):
        #    print(m)
        return range(n)
    
    
    def sets(n):
        r=[]
        for e in numbers(n):
          r.append([e])
        return r
    
    print(sets(6))
    

    输出:

    [[0], [1], [2], [3], [4], [5]]
    

    Pythonic 解决问题的方法如下 - 一个班轮

    def create_list(n):
        return [[x] for x in range(n)] # Important one liner
    
    print(create_list(5))
    

    【讨论】:

      【解决方案3】:

      for e in numbers(n) 返回 None,因为您不能遍历 None。这意味着没有找到任何东西。这可能会解决问题

      def sets(n):
          r=[]
          for e in numbers(n) or []:    
              r.append([e])  
          return r      
      
      print(sets(6))
      

      另外,在第一部分试试这个

      def numbers(n):  
          return range(n)
      

      【讨论】:

      • 考虑修复缩进
      猜你喜欢
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2023-04-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多