如何使用Pandas、Numpy加速Python中的嵌套for循环逻辑?
我想检查table如何使用Pandas、Numpy加速Python中的嵌套for循环逻辑?,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,我想检查tableTestProject的字段是否包含客户端传递的参数,嵌套for循环是否丑陋,是否有任何有效且简单的方法来实现它?非常感谢你的建议 def test(parameter_a: list, parameter_b: list) -> bool: age = TestPeople.age project_code = TestProject.project_code if age is not None and age <= 16:
TestProject
的字段是否包含客户端传递的参数,嵌套for循环是否丑陋,是否有任何有效且简单的方法来实现它?非常感谢你的建议
def test(parameter_a: list, parameter_b: list) -> bool:
age = TestPeople.age
project_code = TestProject.project_code
if age is not None and age <= 16:
for code in project_code:
for p in parameter_a:
if code[:len(p)] == p:
return False
return True
def测试(参数a:list,参数b:list)->bool:
age=TestPeople.age
project\u code=TestProject.project\u code
如果年龄不是无且年龄可以使用,并且
说明:
在这里,python尝试使用短路求值
,因此它将首先检查age是否为None
,如果为,则返回True
,否则检查age>16
,如果为返回True
,否则检查所有代码,p
对是否匹配条件code>startswith(p)
,如果所有对都通过了条件,返回True
,否则如果对中的任何一对失败,立即返回False
,而不检查其余部分。code.startswith(p)
比将p
与切片进行比较更干净,可能更快。如果条件为False,您仍然必须返回True
,这可以用一个表达式来完成。返回年龄为None或age>16或all(…)
(当我看到你的弹出窗口时,我写了基本相同的答案。:)@chepner谢谢,忘记了第一个if检查。@SayandipDutta非常感谢,再次确认,不需要返回True
,真的吗?
from itertools import product
def test(parameter_a: list, parameter_b: list) -> bool:
age = TestPeople.age
project_code = TestProject.project_code
return (
age is None
or age > 16
or all(code.startswith(p) for code, p in product(project_code, parameter_a))
)