Python语法

Python 条件语句中的逻辑问题

问题描述:

在提供的代码片段中,目标是在键为’S’或’DC’时,迭代 dic_beam[key] 中的子列表,并打印出每个子列表及其对应的键。然而,if 条件中存在逻辑错误,影响了程序的执行。

RC:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
[13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36]
[37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60]
[61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84]
[85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108]
RB:
[]
CC:
[109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120]
[121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132]
[133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144]
[145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156]
DC:
[157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168]
[169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180]
[181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192]
[193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204]
[205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216]
S:
[217]
[218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241]
[242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265]
[266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289]
[290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313]

原始代码:

if key == 'S' or 'DC':
    for index, sublist in enumerate(dic_beam[key], start=0):
        print(key, sublist)
RC [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

问题所在:
条件 if key == ‘S’ or ‘DC’: 会始终评估为 True,因为 ‘DC’ 是一个非空字符串,在Python中,非空字符串被认为是真值。这里的意图是检查变量 key 是否为 ‘S’ 或 ‘DC’,但条件表达不正确。

修正后的代码:
要解决此问题,应明确地将 key 与 ‘S’ 和 ‘DC’ 都进行比较。以下是修正后的代码:

if key == 'S' or key == 'DC':
    for index, sublist in enumerate(dic_beam[key], start=0):
        print(key, sublist)
DC [157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168]

Python 字典列表排序问题

在进行字典中的列表排序时,我们常常需要考虑列表内元素的数据类型。特别是当列表内元素为字符串时,排序的行为会与数值类型有所不同。这里我们探讨了如何正确地对包含字符串的列表进行数值排序。

问题描述

给定一个字典,其值为包含字符串的列表。我们希望根据这些字符串代表的数值进行排序。例如:

dic_value = {
    'RC': [['8'], ['6'], ['17'], ['16'], ['12']],
    'RB': [['3'], ['2'], ['18'], ['11'], ['1']]
}
我们尝试使用以下代码进行排序:

```python
for key in dic_value:
    dic_value[key] = sorted(dic_value[key], key=lambda x: x[0], reverse=True)

预期的结果是列表按照数值降序排列。然而,实际输出并未正确排序:

{'RC': [['8'], ['6'], ['17'], ['16'], ['12']],
 'RB': [['3'], ['2'], ['18'], ['11'], ['1']]}

原因分析
排序未按预期工作的原因是列表内元素为字符串。在Python中,字符串排序是按照字典顺序(也称为lexicographical order)进行的,而不是数值大小。这意味着字符串 ‘8’ 会被视为小于 ‘17’,因为在字典顺序中 ‘1’ 出现在 ‘8’ 之前。

解决方案
要按照数值进行排序,我们需要在排序时将字符串转换为整数。这可以通过修改排序键函数来实现:

for key in dic_value:
    dic_value[key] = sorted(dic_value[key], key=lambda x: int(x[0]), reverse=True)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值