Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于字符串方法的python集合子集_Python_Python 3.x_Set - Fatal编程技术网

基于字符串方法的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'}