繁体   English   中英

列表理解,For-Loop提供不同的结果

[英]List Comprehension, For-Loop give differing results

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]

为什么第一位代码与第二位代码给出不同的结果?

第一行:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM