我正在尝试运行此代码:
ap_counter = 0
ap_on_counter = 0
ap_off_counter = 0
modem_counter = 0
modem_on_counter = 0
modem_off_counter = 0
total_sites = len(local_col_site)
for i in local_site_status_device_list:
if i[2] == "AP":
ap_counter += 1
elif i[1] == "Online" and i[2] == "AP":
ap_on_counter += 1
elif i[1] == "Offline" and i[2] == "AP":
ap_off_counter += 1
elif i[2] == "Modem":
modem_counter += 1
elif i[1] == "Online" and i[2] == "Modem":
modem_on_counter += 1
elif i[1] == "Offline" and i[2] == "Modem":
modem_off_counter += 1
local_site_status_device_list 是包含站点、状态和设备类型的列表数组。我正在尝试计算每个组合。
以下是列表中包含的示例数据:
[["site1", "Online", "AP"], ["site1", "Offline", "AP"], ["site2", "Online", "AP"]]
数据确实故意包含重复项。
到目前为止,我的得分为 0:
ap_on_counter = 0
ap_off_counter = 0
modem_counter = 0
modem_on_counter = 0
modem_off_counter = 0
更改 if 语句以解决错误:
for i in local_site_status_device_list:
if i[2] == "AP":
ap_counter += 1
elif i[2] == "Modem":
modem_counter += 1
if i[1] == "Online" and i[2] == "AP":
ap_on_counter += 1
elif i[1] == "Offline" and i[2] == "AP":
ap_off_counter += 1
elif i[1] == "Online" and i[2] == "Modem":
modem_on_counter += 1
elif i[1] == "Offline" and i[2] == "Modem":
modem_off_counter += 1
事实证明,正如@Anonymous 所指出的,其他条件都被
if i[2] == "AP"
和 elif i[2] == "Modem"
捕获。谢谢你。
与其有很多变量(这不太好管理,不如使用字典。
字典键将是设备。每个设备都会有一个字典值,显示在线/离线计数。您不需要相当于 modem_counter 的东西,因为您可以推断出它是对在线/离线值求和。
local_site_status_device_list = [["site1", "Online", "AP"], ["site1", "Offline", "AP"], ["site2", "Online", "AP"]]
results = dict()
for _, status, device in local_site_status_device_list:
results.setdefault(device, {"Online":0, "Offline":0})[status] += 1
print(results)
输出:
{'AP': {'Online': 2, 'Offline': 1}}
另一种选择是将所有内容转换为集合,并计算符合您的条件的交集数量。
[set(x).intersection(["Online", "AP"]) == {"Online", "AP"} for x in tmp_list].count(True)
[set(x).intersection(["Offline", "AP"]) == {"Offline", "AP"} for x in tmp_list].count(True)
[set(x).intersection(["Online", "Modem"]) == {"Online", "Modem"} for x in tmp_list].count(True)
[set(x).intersection(["Offline", "Modem"]) == {"Offline", "Modem"} for x in tmp_list].count(True)