我想实现如下效果
a=[11, -1, -1, -1]
msg=['one','two','tree','four']
msg[where a<0]
['two','tree','four']
以类似的简单方式(没有讨厌的循环)。
附言。对于好奇的人来说,这个 if 语句是在一种函数式语言中本地工作的。
//编辑
我知道下面的文字与上面的要求不同,但我已经找到了我想要达到的目标。 我不想在我自己的线程中发送垃圾邮件,所以我也找到了一些不错的解决方案, 我想把它呈现给你。
filter(lambda x: not x.endswith('one'),msg)
请您参考如下方法:
您可以使用 list comprehensions为了这。您需要匹配两个列表中的项目,zip功能被使用。这将生成一个元组列表,其中每个元组包含每个原始列表中的一个项目(即 [(11, 'one'), ...])。一旦有了这个,就可以遍历结果,检查第一个元素是否低于 0 并返回第二个元素。有关语法的更多详细信息,请参阅链接的 Python 文档。
[y for (x, y) in zip(a, msg) if x < 0]
实际的问题似乎是在 msg 列表中查找不包含字符串 "one" 的项目。这可以直接完成:
[m for m in msg if "one" not in m]
