2013-10-01 151 views
0

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

print_long.py,定义一个Python函数print_long(list)该取字符串称为列表的列表,并在具有长度大于或等于6。

即原来的问题列表被打印出来的每个字符串。我试过

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

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

+3

不要使用“列表”作为变量名。它是内部使用类型的名称 – jsvk

+1

您是否了解函数递归?为什么要计算列表的长度而不是列表元素的长度? – dmitri

+0

'for x in mylist:print x' –

回答

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'] 
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 
1

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

for i in mylist: 

您可能还需要更改LEN()为=> 6

if len(i) >= 6 

从你写什么,它看起来是这样说的,“打印出长度大于或等于6的列表中的每个字符串。”所以,你需要平等,以确保您捕捉到6

1

长度等于一个短:

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

首先,列表是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) 

这是不正确,你只是想通过列表进行迭代,如在上面第一个例子。实现你正在寻找的结果的更Python的方式是:

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

查找Python list comprehension■如果你不明白。

1

您正在对您的函数进行递归调用,而不是先减少列表输入。因此,它将继续进行无限递归调用。

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

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