Python字符串过滤器

时间:2018-01-25 23:51:38

标签: python string lambda filter

我正在尝试解决下面列出的课程作业

使用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 好像它以十六进制返回一个内存地址... 怎么了?

3 个答案:

答案 0 :(得分:2)

在python 3中,过滤器对象是迭代器。要打印内容,您必须首先将其实现为序列,因此请尝试:

print( list(result))

另请参阅:How to use filter, map, and reduce in Python 3

答案 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']