【问题标题】:subset of python set based on string methods [duplicate]基于字符串方法的python集子集[重复]
【发布时间】:2019-02-22 15:49:40
【问题描述】:

给定以下集合:

s = {"brown", "blue", "Blue", "green", "red", "black"}

如何使用 Python 字符串方法从中提取子集?

例如以下应用于一个字符串,如果它们可以应用于整个集合,将拉出不同的子集:

"brown".startswith("b")
"Blue".lower().startswith("b")
"e" in "green"

我有唯一的无序列表,即集合,我想知道这种操作是否可以在 Python 集合上巧妙地执行,这样我就可以避免编写列表推导。

【问题讨论】:

  • 不清楚你在问什么。存在集合推导。
  • 哦,是的,当然,忘记了它们......我猜没有更短的方法吗?
  • 没有更短的方法?你想要多短?
  • 谢谢,我认为除非你定义一个函数,否则它不会变短

标签: python python-3.x set


【解决方案1】:

您可能正在寻找这样的集合推导:

subset = {sub for sub in s if sub.startswith('b')}

这也可以使用filteroperator.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'}

【讨论】:

  • @cardamom 我添加了另一个选项,使用了更短的过滤器 (如果您使用别名方法调用者),如果您以后不需要它作为一个集合,只需离开 @987654327 @out也
猜你喜欢
  • 2019-12-24
  • 2016-04-30
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-04
  • 1970-01-01
相关资源
最近更新 更多