首页 > 解决方案 > 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)

标签: pythonloops

解决方案


首先,我不完全确定您期望它如何工作:

for sample1 in sample_attr and sample2 in sample_val:

因为您提供了一个布尔表达式,您应该在其中提供一个可迭代的。我觉得你想要的更像

for sample1, sample2 in zip(sample_attr, sample_val):

但是,最好保持这是一个更“自然”的数据结构。该pandas包是专门为处理数据帧而构建的;查看可用的文档和教程,更不用说 Stack Overflow 上的数千个示例了。我强烈怀疑您可以备份一步并将yoru数据直接读取到数据框中。


推荐阅读