from sklearn.datasets import load_iris
data = load_iris()
iris = pd.DataFrame(data.data,columns = data.feature_names)
iris['target_names'] = [data.target_names[i] for i in data.target]
for i in data.target:
iris['target_names'][i] = data.target_names[i]
为什么第一位代码与第二位相比给出了不同的结果?
答案 0 :(得分:1)
iris['target_names'] = [data.target_names[i] for i in data.target]
生成元素data.target_names[i]
for i in data.target:
iris['target_names'][i] = data.target_names[i]
引用所有相同的部分,但将它们存储到:
iris['target_names'][i]
这会产生与理解相同的唯一方法是,如果iris['target_names']
是相同长度的列表data.target
,data.target
包含等效的range(len(data.target))
。
要构建与循环相同的理解(在2中),iris['target_names']
可能需要是dict
。
iris['target_names'] = {i: data.target_names[i] for i in data.target}
同样如下:
for i in data.target:
iris['target_names'][i] = data.target_names[i]
要构建一个与理解相同的循环(在1中),您需要附加到list
之类的:
iris['target_names'] = []
for i in data.target:
iris['target_names'].append(data.target_names[i])
同样:
iris['target_names'] = [data.target_names[i] for i in data.target]