尝试使用理解来执行此操作。
鉴于您上面的代码,dataset 的结构有两种不同的情况:
-
这是一个列表的列表,例如:
数据集 = [
[0,1,2,3],
[1,2,3,4],
[0,0,2,1],
[1,0,1,0]
]
-
它是列表的键控字典,例如:
数据集 = {
'cluster_1': [0,1,2,3],
'cluster_2': [1,2,3,4],
'cluster_3': [0,0,2,1],
'cluster_4':[1,0,1,0]
}
案例 1:如果您的数据集是列表列表,您可以使用列表推导式来做到这一点:
dataset = [[int(y != 0) for y in x] for x in dataset]
它的作用是创建一个列表列表:
- 外部列表推导
[█ for x in dataset] 将 dataset 中的每个列表 x 评估为推导,
- 内部列表推导
[█ for y in x] 评估列表 x 中的每个值 y。
- 表达式
int(y != 0) 是三元表达式y if y== 0 else 1 的简化,因为三元在Python 中很笨重。如果 y == 0,y !=0 将产生布尔值 False,否则为 True。将其转换为 int() 将产生与三元逻辑相同的输出(0,如果 y 是 0,或者在所有其他情况下为 1)。
完整示例:
dataset = [
[0,1,2,3],
[1,2,3,4],
[0,0,2,1],
[1,0,1,0]
]
dataset = [[int(y != 0) for y in x] for x in dataset]
print(dataset)
产量:
[[0, 1, 1, 1], [1, 1, 1, 1]]
CASE 2:如果dataset是一个字典,你可以使用字典推导:
dataset = {key: [int(y != 0) for y in val] for key, val in dataset.items()}
完整示例:
dataset = {
'cluster_1': [0,1,2,3],
'cluster_2': [1,2,3,4],
'cluster_3': [0,0,2,1],
'cluster_4': [1,0,1,0]
}
dataset = {key: [int(y != 0) for y in val] for key, val in dataset.items()}
print(dataset)
产量:
{'cluster_1': [0, 1, 1, 1], 'cluster_2': [1, 1, 1, 1], 'cluster_3': [0, 0, 1, 1], 'cluster_4': [1, 0, 1, 0]}