问题是我必须编写一个程序,它接受一个单词列表和一个整数,并返回长度大于该整数的单词。我只能使用filter()。 这就是我写的:
def filter(list,integer):
largenum = list(filter(lambda x: len(x) > integer, list ))
return largenum
inp = input("Enter the words: ").split()
intr = input("Enter the integer: ").split()
print (filter(inp,intr))
当我运行它并给出输入时,它会出错:
运行时错误:超出了最大递归深度。
我做错了什么?
编辑:我明白了。 XD这样一个愚蠢的错误。 1.)我将过滤器(list,integet)更改为filterthis(字符串,整数) 2.)intr = input("输入整数:")。split()到intr = int(输入("输入整数:")
答案 0 :(得分:1)
你已经编写了过滤函数,在没有基本情况的情况下调用自己。
重命名过滤器功能。
In [8]: def my_filter(l, i):
...: largenum = filter(lambda x: len(x)> i, l) # if python3, use list(filter)
...: return largenum
...:
In [9]: inp = ["LOL", "DA", "YAYASTRING"]
In [10]: intr = 2
In [11]: my_filter(inp, intr)
Out[11]: ['LOL', 'YAYASTRING']
答案 1 :(得分:1)
您将integer
作为list
传递。因此请使用integer[0]
。然后input
会返回str
。所以请使用int(integer[0])
。
然后您使用filter
作为function name
。这样会覆盖builtin
函数filter
。此外,您将列表作为variable
{ {1}}。它也会覆盖list
。您可以试试这个
builtin callable list
答案 2 :(得分:0)
您的filter
版本将影响内置的python,它具有相同的名称。因此,当你从filter
内部调用它时,它不是真正要打算调用的内置函数,而是你函数本身。由于递归没有停止规则,因此最终会超出允许的堆栈深度。
同样适用于list
。具有相同名称的函数参数将隐藏内置python list
容器。
此外,在将第二个参数传递给函数之前,您需要将其转换为int
。
代码:
def fil(lst, integer):
return filter(lambda x: len(x) > integer, lst)
>>> fil(['Hello', 'how', 'are', 'you', 'doin'], 3)
['Hello', 'doin']