如何转换列表附加 for, if, elif 以列出理解



我'喜欢转换列表附加代码与多个for和if,elif列出理解。 我试过了,但只有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'">

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

让我们考虑以下函数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_,以将总和保持在第 i行中的第 j 个值。条件if lst[i][j] > 1:可防止将任何小于2的数字添加到sum_中。最后,当第 i行中的所有值都经过时,结果总和将附加到"扁平化"列表 (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))]

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

最新更新