我一直在尝试打印恰好位于列表中的函数的结果。如果这没有意义。
在print_long.py
中,定义一个Python函数print_long(list)
,它接受一个名为list的字符串列表,并打印出列表中长度大于或等于6的每个字符串。
这是原始问题。我试着做了
def print_long(list):
for i in print_long(list):
if len(list) > 6:
print (i)
else:
return None
但这显然是错误的,因为它无限循环它。或者它似乎似乎这样做。 帮助
答案 0 :(得分: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']
答案 1 :(得分: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
答案 2 :(得分:1)
将参数命名为list以外的参数。 Jonathon Reinhart提出了一个很好的建议:mylist。 上面的其他代码示例也为更好地编写for循环提供了很好的建议:
for i in mylist:
您可能还需要将len()更改为=&gt; 6.
if len(i) >= 6
根据你所写的内容,它看起来“打印出长度大于或等于6的列表中的每个字符串。”因此,您需要等于确保捕获长度等于6
答案 3 :(得分:1)
简短的一句:
def print_greater_or_equal_than(mylist, n):
print '\n'.join(filter(lambda i: len(i) >= n, mylist))
答案 4 :(得分:1)
首先,您正在对函数进行递归调用,而不会减少列表输入。因此,它将继续对无穷大进行递归调用。
要避免无限叠加的递归,请在列表中打印该项目。在递归之前删除它:
def print_long(list):
i = list.pop(0)
if len(list) > 6:
print (i)
else:
return None
if len(list):
print_long(list)
答案 5 :(得分: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。