如何将if,ifif转换为列表附加

时间:2020-03-31 03:35:27

标签: python if-statement list-comprehension

我想将多个列表附加代码转换为if和ifif,以实现列表理解。 我尝试过,但是只有temp_list有效。 temp_list2无法正常工作

原始代码

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'”

任何人都可以帮助修复它吗?

1 个答案:

答案 0 :(得分:0)

让我们考虑以下函数sumlists,该函数通过获取大于1的每行中值的总和来“平化”二维二维列表:

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_,以将总和保存到 ith jth 值>行。条件if lst[i][j] > 1:阻止将小于2的任何数字添加到sum_。最后,当 ith 行中的所有值都经过处理后,结果总和将附加到“扁平化”列表(new_list)上。这样,我们就将所有这些信息分解为从函数定义到列表理解的方法。

第1步:循环行:

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

第2步:循环列:

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

第3步。为了求和,条件将返回大于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))

步骤4.总和:将[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))

步骤5。将总和追加到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))]

我希望这能回答您的问题。

相关问题