将范围值分配给数据表

时间:2013-04-01 22:18:50

标签: python

假设我有两个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). 

我很难想出一个合适的方法来编程。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分: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')]

这可以帮助您开始解决问题。