【发布时间】:2020-04-18 03:03:09
【问题描述】:
我正在尝试从两个列表中删除索引,如果两个列表中的给定索引值都等于 0。下面我编写了一种方法来执行此操作,但我的真实数据集包括 >11K 列表和每个列表 >30K 索引.
所以我的问题是有一种更简单/更有效的方法吗?
data = [[8,0,3,0,1,0,1],[1,0,2,8,0,0,3]]
# taking the sum of indices across all arrays if it equals 0 you know that that index is 0 across all arrays
sum_dict = {}
for array in data:
for i in range(len(array)):
value = array[i]
if i not in sum_dict:
sum_dict[i] = value
else:
sum_dict[i] += value
# removing indices that have sum=0 in all arrays and create "clean" data
clean_data = []
sum_dict = {key:val for key, val in sum_dict.items() if val == 0}
for array in data:
for i in sorted(list(sum_dict.keys()), reverse=True):
del array[i]
clean_data.append(array)
print(clean_data)
输出:
[[8, 3, 0, 1, 1], [1, 2, 8, 0, 3]]
【问题讨论】:
-
这是一个很好的例子,说明为什么发布清晰的代码很重要。您的散文本身有点难以理解,代码也是如此。但是在一起,你有一个非常好的明确问题,我很乐意回答。干得好!
-
所有列表的长度是否相同?还是数据参差不齐?
-
谢谢,我很乐意采纳您的建议!如果有不清楚的地方,请告诉我!
-
@pr94,如果两个子列表的长度不同,例如
data = [[1,2,0],[3,4]],输出应该是什么 -
所有列表的长度确实相等,列表中的位置表示给定的特征。例如。两个列表中的索引 5 显示特征 x 的值。希望这会有所帮助!
标签: python arrays list dictionary indexing