【问题标题】:printing list in python after a function函数后在python中打印列表
【发布时间】:2013-10-01 03:02:04
【问题描述】:

我一直在尝试打印恰好在列表中的函数的结果。如果这没有意义。

print_long.py 中,定义一个 Python 函数 print_long(list),它接受一个名为 list 的字符串列表,并打印出 list 中长度大于或等于 6 的每个字符串。

这是最初的问题。我试过做

def print_long(list):  
    for i in print_long(list):  
        if len(list) > 6:  
            print (i)  
        else:  
            return None

但这显然是错误的,因为它无限循环。或者它似乎是这样做的。 帮助。

【问题讨论】:

  • 不要使用 'list' 作为变量名。它是内部使用的类型的名称
  • 你明白函数递归吗?为什么要计算列表的长度而不是列表元素的长度?
  • for x in mylist: print x
  • 您是否有列表列表的列表...: [1 ,2 ,[1, 2, 3, [1, 2, 3, ...], ...], . ..] ?

标签: python string list printing


【解决方案1】:

您的代码似乎是没有基本(终止)条件的递归调用。也就是说,当您第一次调用print_long() 时,您会立即调用print_long(),它会无限调用print_long()

您可能尝试的代码类似于:

def greater_than(mylist, n):
    for item in mylist:
        if len(item) > n:
            print item

mylist = ["hello", "foo", "bar", "testing", "world"]
greater_than(mylist, 4) # Prints: hello, testing, world

或者,更简单地说:

mylist = ["hello", . . ., "world"] # Same as above
n = 4
[x for x in mylist if len(x) > n] # ['hello', 'testing', 'world']

【讨论】:

    【解决方案2】:

    我认为这就是你想要做的:

    def print_long(in_list):   # define your function
        for i in in_list:      # loop over the input list
            if len(i) > 6:     # test the length of the elements
                print (i)      # if true print it out
            else:              # you don't need this else, as you really just want
                pass           # to do nothing if len(i) < 6
    

    【讨论】:

      【解决方案3】:

      将您的参数命名为列表以外的名称。 Jonathon Reinhart 提出了一个很好的建议:mylist。 上面的其他代码示例也为更好地编写 for 循环提供了很好的建议:

      for i in mylist:
      

      您可能还需要将 len() 更改为 => 6。

      if len(i) >= 6
      

      从您写的内容来看,它看起来是“打印出列表中长度大于或等于 6 的每个字符串。”所以你需要 equal 来确保你捕获的长度等于 6

      【讨论】:

        【解决方案4】:

        一个简短的:

        def print_greater_or_equal_than(mylist, n):
          print '\n'.join(filter(lambda i: len(i) >= n, mylist))
        

        【讨论】:

          【解决方案5】:

          首先,您在不减少列表输入的情况下对函数进行递归调用。因此,它将继续递归调用无穷大。

          为避免无限的递归堆栈,请打印列表中的项目并在递归之前将其删除:

          def print_long(list): 
              i = list.pop(0)
              if len(list) > 6:  
                  print (i)  
              else:  
                  return None
              if len(list):
                  print_long(list)
          

          【讨论】:

            【解决方案6】:

            首先,list 是 Python 中的保留关键字,所以不要将其用作参数或变量名。我通常使用lst。无论如何,这里还有一些其他问题需要解决。

            def print_long(lst):
                for i in lst:
                    if len(i) >= 6:
                        print i
            
            print_long(['foo','bar','hello','johnny'])
            

            之前,您试图迭代您的函数:

            for i in print_long(lst)
            

            这是不正确的,您只是想遍历列表,如上面的第一个示例所示。实现您正在寻找的结果的更 Pythonic 方式是:

            print ' '.join([i for i in lst if len(i) >= 6])
            

            如果您不明白,请查找Python list comprehensions。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-06-21
              • 2021-11-29
              • 2015-07-14
              • 1970-01-01
              • 1970-01-01
              • 2017-08-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多