给出以下设置:
s = {"brown", "blue", "Blue", "green", "red", "black"}
如何使用Python字符串方法从中提取子集?
例如,以下内容应用于一个字符串,如果可以应用于整个字符串,则会提取不同的子集:
"brown".startswith("b")
"Blue".lower().startswith("b")
"e" in "green"
我有唯一的无序列表(即集合),并且想知道是否可以在Python集合上整齐地执行这种操作,从而避免编写列表推导。
答案 0 :(得分:4)
您可能正在寻找像这样的集合理解:
subset = {sub for sub in s if sub.startswith('b')}
这也可以使用filter
和operator.methodcaller
from operator import methodcaller as call
subset = set(filter(call('startswith', 'b'), s))
如果没有易读性的选项,则可以使用set unpacking:{*iterable}
所以方法看起来像:
def findall(s, find, meth = 'startswith')
return {*filter(call(meth, find), s)}
findall(s, 'b')
#{'blue', 'brown', 'black'}