如何将带有for、if、elif的列表附加转换为列表理解

2024-05-17 01:28:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我喜欢将带有mulitple for和if、elif的列表附加代码转换为列表理解。 我试过了,但只有临时名单有效。 临时列表2工作不正常

原始代码

temp_list = []
temp_array = accd['ACCD_SEQ'].values
temp_list = [i for i in temp_array if len(accd[accd['ACCD_DTL'].str.contains(i)]) != 0]

temp_list2 = []

for i in temp_list:
    if len(accd[accd['ACCD_DTL'].str.contains(i)]) == 1:
        temp_list2.append(i)
    elif len(accd[accd['ACCD_DTL'].str.contains(i)]) > 1:
        for j in range(len(accd[accd['ACCD_DTL'].str.contains(i)])):
            temp_list2.append(i)
    else:
        pass

我的审判

temp_list2 = [i if len(accd[accd['ACCD_DTL'].str.contains(i)]) == 1 else i for j in range (len(accd[accd['ACCD_DTL'].str.contains(i)])) if len(accd[accd['ACCD_DTL'].str.contains(i)]) > 1 for i in temp_list

此代码表示“UnboundLocalError:赋值前引用的局部变量'i'”

有人能帮忙修理吗


Tags: 代码in列表forleniftemplist
1条回答
网友
1楼 · 发布于 2024-05-17 01:28:35

让我们考虑以下函数^ {CD1>},它通过“大于{{CD2>}:

的每行中的值之和”来“平坦化”数值二维列表。
def sumlists(lst):
    new_lst = []

    for i in range(len(lst)):
        sum_ = 0

        for j in range(len(lst[i])):
            if lst[i][j] > 1:
                sum_ += lst[i][j]

        new_lst.append(sum_)

    return new_lst

例如,如果lst是:

lst = [
        [1, 2, 3],
        [4, 5, 1, 6],
        [7, 1]
]

产出将是:

[5, 15, 7]

该函数有两个嵌套的for循环,其索引分别为ij以遍历lst行和列。在检查每一行中的值之前,我们需要定义一个变量,在本例中为sum_,以将总和保持为第i行中的jth值。条件if lst[i][j] > 1:阻止任何小于2的数字被添加到sum_。最后,当第中的所有值都已处理完毕时,结果总和将被追加到“展平”列表(new_list)。有了这些,让我们把所有这些信息分解,从函数定义到列表理解

第一步。循环行:

arr[i] for i in range(len(arr))

第二步。循环的列:

arr[i][j] for j in range(len(arr[i]))] for i in range(len(arr))

第三步。条件为求和,返回大于1的值,否则返回0:

arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))] for i in range(len(arr))

第四步。求和:添加[arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]中的所有值

sum([arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]) for i in range(len(arr))

第五步。将总和追加到new_lst

↓ here                                                                                        ↓ here
[sum([arr[i][j] if arr[i][j] > 1 else 0 for j in range(len(arr[i]))]) for i in range(len(arr))]

我希望这能回答你的问题

相关问题 更多 >