python - 如何使用 python 的 any() 或 next() 函数检查构造以查看元素是否存在
问题描述
我有以下要求,我想检查一个模式是否是任何列表项的子字符串。如果没有,则继续如下:
for(feature in features):
permissions = ['assets:analyticdn', 'assets.analyticun', 'assets1', 'assets2']
present = False
for(permission in permissions):
if('assets:analytic' in permission):
present = True
break
if present == False:
continue # go to line ---> for(feature in features):
# execute the rest of the code if present is True
这可以缩短并以更pythonic的方式编写吗?
解决方案
首先,您不需要在for
参数或if
条件周围加上括号。
其次,你应该交换你的循环,因为permissions
不要依赖feature
:你会做len(features)
同样的测试,但你只需要做一次这个测试。
第三,你有“我想继续外循环”的问题。在某些语言中,您可以放置一个标签 ( continue label
),但是对于这个问题有一个明显的解决方案:创建一个函数。
permissions = ['assets:analyticdn', 'assets.analyticun', 'assets1', 'assets2']
features = ["feature"]
def contains_analytic(permissions):
for permission in permissions:
if 'assets:analytic' in permission:
return True
return False
for feature in features:
if not contains_analytic(permissions):
continue
# execute the rest of the code if present is True
四、你可能想现在permission
找到哪个:
def find_analytic(permissions):
for permission in permissions:
if 'assets:analytic' in permission:
return permission
return None
for feature in features:
permission = find_analytic(permissions)
if permission is None:
continue
# execute the rest of the code if present is True
print(feature, permission)
现在你可以使用一个next
和一个生成器:
def find_analytic(permissions):
return next((p for p in permissions if 'assets:analytic' in p), None)
for feature in features:
permission = find_analytic(permissions)
if permission is None:
continue
# execute the rest of the code if present is True
print(feature, permission)
我会保留单行功能,因为它解释了它的作用:您不必问自己这一行是什么意思或添加评论。
如果您不需要 的值permission
,那么您可以any('assets:analytic' in p for p in permissions)
按照@John Gordon 在评论中的建议使用。
推荐阅读
- java - 线程“主”java.lang.IllegalArgumentException 中的异常:无效行号 (-1) 超出允许范围 (0..1048575)
- python - 您应该为线性回归拟合训练、测试还是所有 x 和 y 值?
- visual-studio-code - Omit last dot character and everything thereafter in VS code snippet
- javascript - 如何创建正则表达式来检查带有数字和空格的用户名?
- php - 在 laravel 中调用 null 上的成员函数 links()
- docker - 未找到 Docker-compose 和 PHP 作曲家,尽管它说的相反
- typescript - TypeScript - 从通用联合类型缩小类型
- php - 无法在 PHPmailer 中使用单选按钮
- r - loadNamespace中的Error是什么意思
- google-api - 使用服务帐户为所有用户创建谷歌文档