Python中最简单的等价于R中grepl函数的方法是什么?

31

有没有一个简单/一行的Python等效于R的grepl函数?

strings = c("aString", "yetAnotherString", "evenAnotherOne") 
grepl(pattern = "String", x =  strings) #[1]  TRUE  TRUE FALSE
3个回答

45
你可以使用列表推导式:

You can use list comprehension:

strings = ["aString", "yetAnotherString", "evenAnotherOne"]

["String" in i for i in strings]
#Out[76]: [True, True, False]

或使用re模块:

import re

[bool(re.search("String", i)) for i in strings]
#Out[77]: [True, True, False]

使用Pandas也可以实现(使用数据框“类似”结构的 R 用户可能会对此库感兴趣):


import pandas as pd

pd.Series(strings).str.contains('String').tolist()
#Out[78]: [True, True, False]

我猜以前的解决方案对于"String$"不起作用,对吗?(即它只是子字符串匹配) - MichaelChirico
如果需要这样做,你将需要使用正则表达式模块。 - Colonel Beauvel

4
可以使用re库实现一行代码的等效功能:
import re

strings = ['aString', 'yetAnotherString', 'evenAnotherOne']
[re.search('String', x) for x in strings]

这将不会给你布尔值,但是得到的“真实”结果同样好。

2

如果您不需要正则表达式,只是想在字符串中测试子字符串的存在:

["String" in x for x in strings]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接