gpt4 book ai didi

python - Python练习中的高阶函数

转载 作者:太空宇宙 更新时间:2023-11-04 09:07:41 26 4
gpt4 key购买 nike

我在学习 Python 并在求解练习期间,函数 filter() 返回空列表,我不明白为什么。这是我的源代码:

"""
Using the higher order function filter(), define a function filter_long_words()
that takes a list of words and an integer n and returns
the list of words that are longer than n.
"""

def filter_long_words(input_list, n):
print 'n = ', n
lengths = map(len, input_list)
print 'lengths = ', lengths
dictionary = dict(zip(lengths, input_list))
filtered_lengths = filter(lambda x: x > n, lengths) #i think error is here
print 'filtered_lengths = ', filtered_lengths
print 'dict = ',dictionary
result = [dictionary[i] for i in filtered_lengths]
return result

input_string = raw_input("Enter a list of words\n")
input_list = []
input_list = input_string.split(' ')
n = raw_input("Display words, that longer than...\n")

print filter_long_words(input_list, n)

最佳答案

您的函数 filter_long_words 工作正常,但错误源于以下事实:

n = raw_input("Display words, that longer than...\n")
print filter_long_words(input_list, n)

n 是字符串,不是整数。

不幸的是,在 Python 中,字符串总是“大于”整数(但无论如何您都不应该比较它们!):

>>> 2 > '0'
False

如果您想知道为什么,这个问题有答案:How does Python compare string and int?


关于您的其余代码,您不应创建将字符串长度映射到字符串本身的字典。

当你有两个长度相等的字符串时会发生什么?您应该以相反的方式映射:strings 到它们的长度。

但更好的是:您甚至不需要创建字典:

filtered_words = filter(lambda: len(word) > n, words)

关于python - Python练习中的高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18557883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com