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)

ETC...

我想编写一个使用 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). 

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

4

1 回答 1

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')]

这应该让您开始了解如何解决问题。

于 2013-04-01T22:47:06.210 回答