关于python:在列表中搜索字符串

Searching for strings in list

本问题已经有最佳答案,请猛点这里访问。

我必须创建一个函数,它将整数、字符串和布尔值的列表作为输入。然后,它把这些字符串打印成一个句子。这是我目前的职责:

1
2
3
4
5
6
def sentenceGenerator(a):
    newList = []
    for string in a:
        if string == str
            newList.append(string)
    print(newList)

我就是这样使用它的:

1
sentenceGenerator(["Mulan","and", 5,"Aladdin","is", True,"Quality"])

我知道if语句不正确,但我不知道如何搜索。


以下部分:

1
string == str

您正在将一个项目与str类型进行比较,由于==操作将比较string的值,所以前面的语句将是False

如果要检查对象的类型,可以使用isinstance()内置函数。

作为一种更为简洁的方法,您可以使用列表理解从列表中获取字符串,并使用适当的分隔符将结果传递给str.join()函数,以便连接单词:

1
2
>>> ' '.join([item for item in l if isinstance(item, str)])
'Mulan and Aladdin is Quality'

怎么样

1
2
source = ["Mulan","and", 5,"Aladdin","is", True,"Quality"]
[word for word in source if isinstance(word, str)]

甚至

1
' '.join([word for word in source if isinstance(word, str)])

得到一个句子?


就这样——

1
2
3
4
5
6
def sentenceGenerator(a):
    newList = []
    for string in a:
        if isinstance(string, str) or isinstance(string, unicode):
            newList.append(string)
    print(newList)

如果您不熟悉lambda,可以使用内置的map函数:

1
2
lst = ["Mulan","and", 5,"Aladdin","is", True,"Quality"]
str ="".join(map(str, lst))

您可以使用filter来查找字符串,然后使用join来像这样组合它们。

1
2
3
4
5
6
def sentenceGenerator(a):
    print ' '.join(filter((lambda x: type(x) is str), a))

sentenceGenerator(["Mulan","and", 5,"Aladdin","is", True,"Quality"])

Mulan and Aladdin is Quality