是否可以使用列表理解来减少有太多for循环和if语句的代码



白名单=[{'name':'tr_1','place':'plc_1','rail':[‘private’,‘protected’],'port':[1001102103]},{'名称':'tr_2','位置':'lc_2','rail':[受保护的'],'port':[2012202]},{'名称':'tr_3','位置':'plc_3','尾部':[私人'],'端口':[303]}]

对于索引,df.iterrows((中的行:

for wl_list in whitelist:
if wl_list['name'] in row['name']:
variable = request.get("link",headers=headers).json()
else:
variable = None
if row['services'] !=0 :
for t_service in row['services']:
if wl_list['name'] != 'global' and variable != None:
for var in variable :
if (var['status']== 'active' and var['id] in service['id']) and ('private' in var['rail'] or 'protected' in var['rail'] ):
if wl_list['place'] in var['place']:
for wl_rail in wl_list['rail']:
if wl_rail in var['rail'] and 'ports' in var.keys():
for v_port in var['ports']:
if len(v_port) != 0:
if v_port['from'] == v_port['to']:
if 'private' in wl_rail:
if v_port['from'] in wl_list['port']:
n_private = 0
else:
n_private = 1
if 'protected' in wl_rail:
if v_port['from'] in wl_list['port']:
n_protected = 0
else:
n_protected = 1
else:
for wl_port in wl_list['port']:
if wl_port > v_port['from'] and wl_port < v_port['to']:
if 'private' in wl_rail:
if v_port['from'] in wl_list['port']:
n_private = 0
else:
n_private = 1
if 'protected' in wl_rail:
if v_port['from'] in wl_list['port']:
n_protected = 0
else:
n_protected = 1 

else:
if 'private' in var['rail']:
n_private = 1
if 'protected' in var['rail']:
n_protected = 1

如何降低代码和时间的复杂性?

代码有点复杂,我不明白这段代码的含义。但你可以试试

# if-else shorthand
<do this> if <condition> else <do this>
# checking condition from a list
if <something> in [item1, item2, ..., item n]:
<do something>
#list comprehension
lst =  [expression for item in iterable if condition == True]

最新更新