2013-04-01 51 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) 

同樣,2行是:

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