我正在尝试解决下面列出的课程作业
使用lambda表达式和filter()函数过滤掉不以字母开头的列表中的单词'。例如:
seq = ['soup','dog','salad','cat','great']
应该过滤到:
['soup','salad']
我写了以下两组代码......
seq = ['soup', 'dog','salad', 'cat', 'great']
result = filter (lambda test: test[0] == "s",seq)
print (result)
seq = ['soup', 'dog','salad', 'cat', 'great']
def checkf (input):
if input[0]=='s':
a = "TRUE"
return(a)
test = seq[0]
result = filter (checkf(test),seq)
print (result)
两个代码都给出了一个奇怪的答案 过滤器对象位于0x112aa06d8 好像它以十六进制返回一个内存地址... 怎么了?
答案 0 :(得分:2)
在python 3中,过滤器对象是迭代器。要打印内容,您必须首先将其实现为序列,因此请尝试:
print( list(result))
答案 1 :(得分:0)
要使用lambda和filter解决此问题,您需要指定代码结果为列表。
因此以下内容将起作用:
seq = ['soup', 'dog','salad', 'cat', 'great']
list(filter (lambda test: test[0] == "s",seq))
或(分配给对象):
seq = ['soup', 'dog','salad', 'cat', 'great']
result = list(filter (lambda test: test[0] == "s",seq))
print(result)
这两个代码的结果将是:
['soup', 'salad']
答案 2 :(得分:0)
这是下面的代码,可根据lambda函数对您的seq进行求解。
seq = ['soup', 'dog','salad', 'cat', 'great']
result = list(filter (lambda test: test[0] == "s",seq))
print(result)
输出:['soup', 'salad']
在函数中使用
seq = ['soup', 'dog','salad', 'cat', 'great']
def check(input):
result = list(filter (lambda test: test[0] == "s",seq))
return result
check(seq)
输出:['soup', 'salad']