Python 上的 AND 布尔条件不起作用?

问题描述 投票:0回答:3

我正在尝试运行此代码:

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
python arraylist counter boolean-logic
3个回答
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"
捕获。谢谢你。


0
投票

与其有很多变量(这不太好管理,不如使用字典。

字典键将是设备。每个设备都会有一个字典值,显示在线/离线计数。您不需要相当于 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}}

0
投票

另一种选择是将所有内容转换为集合,并计算符合您的条件的交集数量。

[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)
© www.soinside.com 2019 - 2024. All rights reserved.