python - 美化/缩短连接的for循环
问题描述
我正在检查字符串列表是否包含特定的子字符串。根据条件,列表中的字符串被添加到另一个列表中,或者分别被排除在外。
这就是我到目前为止所拥有的。它正在工作,但是连接了很多循环。有没有更好(或更多python esque)的方式来写这个?
varNams = ['fee1.foo.bar','fee1.foo','fee2.foo.bar','fee2.foo']
selection = []
sub_incl = ['foo']
sub_excl = ['bar']
for i in range(len(varNams)):
for sub_in in sub_incl:
for sub_ex in sub_excl:
if sub_in in varNams[i] and sub_ex not in varNams[i]:
selection.append(varNams[i])
解决方案
您可以itertools.product
在列表理解中使用。
from itertools import product
varNams = ['fee1.foo.bar','fee1.foo','fee2.foo.bar','fee2.foo']
sub_incl = ['foo']
sub_excl = ['bar']
res = [i for i in varNams for sub_in, sub_ex in product(sub_incl, sub_excl) if sub_in in i and sub_ex not in i]
print(res)
输出
['fee1.foo', 'fee2.foo']
推荐阅读
- c - C 中的多嵌套结构如何分配内存?
- python - 如何模拟python postgres数据库
- android - 如何选择指定文件上传到 Firebase 存储?
- flutter - 如何更改 Flutter Web 应用的默认 Web 服务器 ip(127.0.0.1)
- javascript - 有人可以帮我解决这个错误吗?“this.healthRecord.documents 未定义”
- java - Spotbugs 查找 java 文件中的错误
- javascript - This.state 只返回 1 项,在控制台日志中我看到 2
- java - 将数据从 PostgreSQL 摄取到 Druid 时出现类型转换错误
- javascript - 如何确定更改 url 的 javascript 代码行?
- android - 在android中为图像创建自定义框架