0

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

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

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

4

6 回答 6

3

您的代码似乎是没有基本(终止)条件的递归调用。也就是说,当您第一次调用时,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']
于 2013-10-01T03:12:46.010 回答
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
于 2013-10-01T03:12:58.253 回答
1

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

for i in mylist:

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

if len(i) >= 6

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

于 2013-10-01T03:19:21.903 回答
1

一个简短的:

def print_greater_or_equal_than(mylist, n):
  print '\n'.join(filter(lambda i: len(i) >= n, mylist))
于 2013-10-01T03:22:22.037 回答
1

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

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

def print_long(list): 
    i = list.pop(0)
    if len(list) > 6:  
        print (i)  
    else:  
        return None
    if len(list):
        print_long(list)
于 2013-10-01T06:47:29.347 回答
0

首先,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 comprehension 。

于 2013-10-01T03:26:37.300 回答