基于字符串方法的python集合子集
鉴于以下情况:基于字符串方法的python集合子集,python,python-3.x,set,Python,Python 3.x,Set,鉴于以下情况: s = {"brown", "blue", "Blue", "green", "red", "black"} 如何使用Python字符串方法从中提取子集 例如,应用于一个字符串的以下内容(如果可以应用于整个集合)将引出不同的子集: "brown".startswith("b") "Blue".lower().startswith("b") "e" in "green" 我有独特的无序列表,即集合,我想知道这种操作是否可以在Python集合上整齐地执行,这样我就可以避免编写列表
s = {"brown", "blue", "Blue", "green", "red", "black"}
如何使用Python字符串方法从中提取子集
例如,应用于一个字符串的以下内容(如果可以应用于整个集合)将引出不同的子集:
"brown".startswith("b")
"Blue".lower().startswith("b")
"e" in "green"
我有独特的无序列表,即集合,我想知道这种操作是否可以在Python集合上整齐地执行,这样我就可以避免编写列表理解。您可能正在寻找这样的集合理解:
subset = {sub for sub in s if sub.startswith('b')}
这也可以使用filter和operator.methodcaller完成
如果易读性不是一个选项,您可以使用set unpacking:{*iterable}
因此,一种方法可能看起来像:
def findall(s, find, meth = 'startswith')
return {*filter(call(meth, find), s)}
findall(s, 'b')
#{'blue', 'brown', 'black'}
不清楚你在问什么。集合理解是存在的。哦,是的,当然,忘了它们。。我猜没有比这更短的方法了?没有更短的方法了?你想要多短?谢谢,我想它不会再短了,除非你定义一个function@cardamom我添加了另一个使用过滤器的选项,如果您使用别名methodcaller,那么这个选项会稍微短一点,如果您以后不需要它作为一个集合,那么也可以将它保留为set
def findall(s, find, meth = 'startswith')
return {*filter(call(meth, find), s)}
findall(s, 'b')
#{'blue', 'brown', 'black'}