2013-04-01 3 views
0

Предположим, у меня есть две строки 6 значений (думать о них, как нижняя и верхняя границы пределов координат):Присвоение значений диапазона в таблице данных

lo_values = c(1, 10, 20, 30, 40, 50) 
hi_values = c(9, 19, 29, 39, 49, 60) 

и предположим, у меня есть таблица данных с 6 столбцов, состоящий из 3-х возможных значений (B, L, T):

row1 = c(T, L, L, L, T, B) 
row2 = c(B, B, B, T, T, T) 

и т.д. ...

Я хотел бы написать сценарий, который использует lo_ и hi_values ​​и назначить их к каждой строке на основе входных в таблице данных е. Так, например, row1 будет:

row1 -> (1-9 = T, 10-39 = L, 40-49 = T, 50-60 = B) 

Точно так же, row2 бы:

row2 -> (1-29 = B, 30-60 = T). 

У меня трудное время думать о соответствующим образом запрограммировать это. Любая помощь будет оценена по достоинству.

ответ

0

Пара пунктов в первую очередь. В python строки для текста. То, что вы подразумеваете под строками, это либо кортежи, либо списки. Список - упорядоченный список объектов. В python он представляется так a = [1,2,3,4], так что a - это список из 4 чисел. Кортеж подобен списку, но он неизменен, после его создания его нельзя изменить. Вам нужно будет сделать новую копию с изменениями, если вы хотите другую версию.

Сказав это, я думаю, что понимаю, что вы хотите (но исправьте меня, если я что-то неправильно понял). Этот код должен сделать для вашего примера:

lo_values = (1, 10, 20, 30, 40, 50) # this a tuple 
hi_values = (9, 19, 29, 39, 49, 60) # this too 

rows = [ ('T', 'L', 'L', 'L', 'T', 'B'), 
     ('B', 'B', 'B', 'T', 'T', 'T')] # rows is a list containing 2 tuples, one with each row 

for row in rows: 
    result = [] 
    previous_value = row[0] 
    run_start = 0 
    for i in range(1, len(row)): 
     value = row[i] 
     if value != previous_value: 
      lower_bound = lo_values[run_start] 
      upper_bound = hi_values[i-1] 
      result.append((lower_bound, upper_bound, previous_value)) 
      run_start = i 
     previous_value = value 
    lower_bound = lo_values[run_start] 
    upper_bound = hi_values[-1] 
    result.append((lower_bound, upper_bound, row[-1])) 
    print result 

Результат выполнения:

[(1, 9, 'T'), (10, 39, 'L'), (40, 49, 'T'), (50, 60, 'B')] 
[(1, 29, 'B'), (30, 60, 'T')] 

Это поможет вам начать о том, как подойти к решению проблемы.

+0

Да, извините, списки. –

+0

Это работает отлично. Спасибо за это! –

+0

Если ответ отвечает на ваш вопрос, вы должны его принять. Это увеличит вероятность того, что люди ответят вам в будущем. – entropy

Смежные вопросы