python - For循环将属性与python中的相应值对齐
问题描述
有两个列表 sample_attr 和 sample_val 存储列的位置和每列的值。原始数据说第 1 行 (1:100 3:250 8:50 12:40,...531:300)。有216个样本,每个样本有531个属性。我首先拆分属性及其值,例如:sample_attr[0]->[1,3,8,12,...531], sample_val[0]->[100,250,50,40,...300 ]。每个 sample_attr 列表存储属性位置(第 1 列,第 3 列..列 531),每个 sample_val 列表存储相应属性位置的值。我想做下面的for循环,但是在相应的属性位置排列属性值不起作用:它在“对于sample_attr中的sample1和sample_val中的sample2:”行显示错误。如何将值与其对应的属性(列)位置对齐?
# adjust dimension
for sample1 in sample_attr and sample2 in sample_val:
attr = [0]*maxdim
s=0
for i in sample1:
attr[i-1] = sample2[s]
s=s+1
x.append(attr)
#the whole code below:
with fileinput.input(files=('C:/Users/Documents/dataset.txt')) as f:
for line in f:
datalist.append(line.split())
for exe in datalist:
exe_attr = []
exe_val=[]
for i in range(0, len(exe)):
exe_attr.append(int(exe[i].split(':', 1)[0]))
exe_val.append(int(exe[i].split(':', 1)[1]))
sample_attr.append(exe_attr)
sample_val.append(exe_val)
maxdim = 0
for sample in sample_attr:
if maxdim < sample[-1]:
maxdim = sample[-1]
maxdim = maxdim + 1
x = []
# adjust dimensiona not consistent
for sample1 in sample_attr and sample2 in sample_val:
attr = [0]*maxdim
s=0
for i in sample1:
attr[i-1] = sample2[s]
s=s+1
x.append(attr)
解决方案
首先,我不完全确定您期望它如何工作:
for sample1 in sample_attr and sample2 in sample_val:
因为您提供了一个布尔表达式,您应该在其中提供一个可迭代的。我觉得你想要的更像
for sample1, sample2 in zip(sample_attr, sample_val):
但是,最好保持这是一个更“自然”的数据结构。该pandas
包是专门为处理数据帧而构建的;查看可用的文档和教程,更不用说 Stack Overflow 上的数千个示例了。我强烈怀疑您可以备份一步并将yoru数据直接读取到数据框中。
推荐阅读
- javascript - 按键映射对象数组
- java - 来自servlet请求的输入流的线程问题
- postman - Postman - 如何在 POST 多部分/表单数据请求中嵌入文件作为 base64 字符串?
- mysql - 如果不存在则插入新行
- java - 使用 MediaRouter 将音频路由到 BT 耳机
- pyspark - pyspark:删除作为另一列值的子字符串,并从给定列的值中包含正则表达式字符
- javascript - 如何等待来自 node.js 服务器的新信息
- javascript - 错误:脚本执行在 30000 毫秒后超时
- python - 如何验证在机器人框架中启用或禁用切换按钮
- sql-server-data-tools - SSDT 针对不同环境更改范围凭证