我想将多个列表附加代码转换为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'”
任何人都可以帮助修复它吗?
答案 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
循环,分别具有索引i
和j
遍历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))]
我希望这能回答您的问题。