列表理解,For-Loop给出不同的结果

时间:2017-07-29 22:18:04

标签: python pandas list-comprehension

from sklearn.datasets import load_iris
data = load_iris()
iris = pd.DataFrame(data.data,columns = data.feature_names)
  1. iris['target_names'] = [data.target_names[i] for i in data.target]

  2. for i in data.target: iris['target_names'][i] = data.target_names[i]

  3. 为什么第一位代码与第二位相比给出了不同的结果?

1 个答案:

答案 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.targetdata.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]