【问题标题】:Filter Strings Using Ternary operator使用三元运算符过滤字符串
【发布时间】:2024-01-22 11:25:01
【问题描述】:

我需要知道为什么我的 option1 有效而 option2 无效。 我不追求列表理解解决方案或替代答案。

Option1 :这有效并提供[23, 23, 34] 这是我所期望的

list(filter(lambda x: True if x>9 else False, [1,23,23,34]))

Option2 不起作用。请注意,我有多个字符串要检查列表

list(filter(lambda x: True if x in ('red', 'oh') else False, ['fred', 'john', 'Nick']))

option2 的预期输出为:

['fred', 'john']

【问题讨论】:

  • 实际输出呢?
  • ['fred', 'john'] 是我的预期输出
  • 我明白这一点。实际输出是多少
  • 这些项目中的任何一个如何是“red”或“oh”的子字符串?

标签: python-3.x conditional-operator


【解决方案1】:
True if x in ('red', 'oh') else False

看看 x。如果 x 是“Fred”,x 是 not 在“red”中(“red”在“Fred”中) 你想要相反。

True if 'red' in x or 'oh' in x else False

总行数是

list(filter(lambda x: True if 'red' in x or 'oh' in x else False, ['fred', 'john', 'Nick']))

虽然不是很漂亮,但这就是你可以用任意数量的字符串做到这一点的方法:

names = ['fred', 'john', 'nick']
subs = ['red', 'oh']
list(filter(lambda x: True if any([y in x for y in subs]) else False, names))

【讨论】:

  • 不是我的翠菊。我知道列表理解会起作用,但我想使用指定的过滤器和 lambda 应用三元运算符。
  • 那是?它实际上只是过滤器的 lambda 部分
最近更新 更多