Для циклов выстраивать атрибуты с соответствующим значением в python - PullRequest
0 голосов
/ 16 апреля 2020

есть два списка 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..column 531), а каждый список sample_val сохраняет значение в соответствующей позиции атрибута. Я хочу сделать цикл for ниже, но он не работает для выравнивания значения атрибута в соответствующей позиции атрибута: он показывает ошибку в строке «для sample1 в sample_attr и sample2 в sample_val:». как я могу выровнять значения с их соответствующей позицией атрибута (столбца)?

# 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)

1 Ответ

1 голос
/ 16 апреля 2020

Во-первых, я не совсем уверен, как вы ожидаете, что это сработает:

for sample1 in sample_attr and sample2 in sample_val:

, потому что вы предоставляете логическое выражение, где вы должны дать итерацию. Я думаю, что то, что вы хотели, больше похоже на

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

Однако, вам может быть лучше сохранить эту более "естественную" структуру данных. Пакет pandas создан специально для работы с фреймами данных; Ознакомьтесь с доступной документацией и учебными пособиями, не говоря уже о тысячах примеров здесь, на переполнении стека. Я сильно подозреваю, что вы можете сделать резервную копию одного шага и прочитать данные прямо в фрейм данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...