我'喜欢转换列表附加代码与多个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
循环,索引分别为i
和j
,用于遍历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))]
我希望这能回答你的问题。