比较字符串与表python的元素

时间:2014-05-22 12:36:35

标签: python

我有一串像这样的东西:

"1000101101000111000011101000001001111000"

和这样的表:

[[97, '11'], 
 [111, '10'], 
 [32, '010'], 
 [115, '011'], 
 [100, '0011'], 
 [108, '0010'], 
 [110, '0001'], 
 [114, '0000']]

我想用int值(97,111,32,...)对字符串进行编码,但每次我只得到[111,108],因为它没有返回并只添加位置。谁能帮我理解为什么?这就是我所拥有的:

array_final = []
posSeg = 0
for i in range(len(tabela)):
    if arrayJunto[posSeg:(posSeg+len(tabela[i][1]))]==tabela[i][1]:
        array_final.append(tabela[i][0])
        posSeg += len(tabela[i][1])

2 个答案:

答案 0 :(得分:0)

我这样做了,希望它有所帮助:

t = [[97, '11'], 
    [111, '10'], 
    [32, '010'], 
    [115, '011'], 
    [100, '0011'], 
    [108, '0010'], 
    [110, '0001'], 
    [114, '0000']]
>>> s =""
>>> for l in t: s += str(l[0])
... 
>>> s
'9711132115100108110114'

答案 1 :(得分:0)

首先,将这些值保留在tabela中是不明智的 - 字典映射是一种更容易编码的方法:

map_dict = dict((t[1], t[0]) for t in tabela)

给出:

map_dict == {'0010': 108, '0011': 100, '0001': 110, 
             '0000': 114, '10': 111, '11': 97, 
             '011': 115, '010': 32}

其次,您正在迭代tabela而不是 arrayJunto。它应该看起来像:

while posSeg < len(arrayJunto):
    for key in map_dict:
        if arrayJunto[posSeg:posSeg + len(key)] == key:
            posSeg += len(key)
            array_final.append(map_dict[key])
            break
    else:
        break

两个break确保:

  1. 您找不到相同字符的多个匹配项;和
  2. 如果没有匹配,你就不会陷入无限循环。
  3. 这给了我:

    array_final == [111, 108, 97, 32, 100, 111, 110, 97, 32, 114, 111, 115, 97]