#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