LabelEncoder和zip python的问题

LabelEncoder和zip python的问题,python,string,python-3.x,list,scikit-learn,Python,String,Python 3.x,List,Scikit Learn,我有一组列表,每个列表包含属于多个类的字符串实例。我希望将它们编码成数字类,用于培训LSTM。我尝试的是: from sklearn.preprocessing import LabelEncoder enc1 = LabelEncoder() enc2 = LabelEncoder() enc3 = LabelEncoder() encoders = [enc1, enc2, enc3] labels = [y1, y2, y3] for i,j in zip(encoders, labe

我有一组列表,每个列表包含属于多个类的字符串实例。我希望将它们编码成数字类,用于培训LSTM。我尝试的是:

from sklearn.preprocessing import LabelEncoder
enc1 = LabelEncoder()
enc2 = LabelEncoder()
enc3 = LabelEncoder()

encoders = [enc1, enc2, enc3]
labels = [y1, y2, y3]

for i,j in zip(encoders, labels):
    j = i.fit_transform(j)
但是,当我尝试时,所有列表的输出仍然是相同的字符串类:

print(format(Counter(y2)))
# Out: Counter({'m': 125585, 'f': 52589})
只有单独编码时,
LabelEncoder
才能工作,显示整数类:

y2 = enc2.fit_transform(y2)
print(format(Counter(y2)))
# Out: Counter({1: 52589, 0: 125585})

zip
方法会有什么问题?

更干净、更具Python风格的解决方案是列表理解:


。。。这将避免在循环中重复使用
j
时出现错误。

如果将label\u编码器的输出分配给临时循环变量
j
,它将不会反映在实际列表中。您需要明确地替换列表中的元素,或者最好创建一个新列表。
transformed = [i.fit_transform(j) for i, j in zip(encoders, labels)]