Python: назначьте идентификаторы столбцов и выполните вычисление в зависимости от положения столбца и идентификатора

#python #arrays #list #math

#python #массивы #Список #математика

Вопрос:

Я перебираю файл, содержащий всего несколько сотен строк. Данные в каждой строке разделены табуляцией и по существу (фактически около 50 записей в строке, но вы поняли идею)

 ID_value ctrl_val_A ctrl_val_B ctrl_val_C cond1_val_A cond1_val_B cond1_val_C cond2_val_A cond2_val_B cond2_val_C
  

В каждой строке я хочу выполнить простое вычисление для каждого из значений condx_val_y (cond / ctrl). Хитрость в том, что я хочу вычислять только с использованием соответствующего элемента управления (либо A, B, либо C).

Я не уверен в лучшем (наиболее питоническом) способе сделать это. Я вставлял строку в список с помощью line.split(‘ t’), но, возможно, понимание списка — не лучший способ..

Я уверен, что есть простое решение, я просто не использую правильные условия поиска или что-то в этом роде. Любая помощь была бы высоко оценена!!!

Заранее спасибо.

Комментарии:

1. Всегда ли значения находятся в одном и том же порядке? Как ctrl_val_B всегда будет 3-м значением в строке?

2. Если каждый набор занимает 3 секунды, затем удалите первый столбец, а затем сгруппируйте по три оставшуюся строку. Затем используйте zip , чтобы получить свои пары.

3. Спасибо, ребята, каждый набор строк имеет тот же номер, что и образцы ctrl (по 3 в каждом порядке A, B, C).. Бурхан, возможно ли было бы предоставить какой-нибудь базовый пример кода?

Ответ №1:

Ваши элементы выровнены парами по три, поэтому вы можете с помощью оператора modulus ( % ) выбрать правильное значение для условия.

 values = [Avalue, Bvalue, Cvalue]
0 % 3 = 0 # values[0 % 3] => select A
1 % 3 = 1 # select B
2 % 3 = 2 # select C
3 % 3 = 3 # select A again
4 % 3 = 4 # select B again...
# ...
  

Пример кода:

 #!/usr/bin/env python2.7
# encoding: utf-8
'''
'''
FNAME = ...
for line in open(FNAME):
    row = line.split('t')
    values = row[1:4]
    conditions = row[4:]

    for i, cond in enumerate(conditions):
        v = values[i % 3]
        # use cond and v to calculate your value