代码之家  ›  专栏  ›  技术社区  ›  snoob dogg

将字符串转换为整数列表

  •  0
  • snoob dogg  · 技术社区  · 8 年前

    假设我有绳子 "blahbla" ,它使用4个不同的字母 ["a", "b", "h", "l"] {'a': 0, 'b': 1, 'h': 2, 'l': 3} (我所有的话都会保持原样。)

    我的目标是把这个词转换成: [1, 3, 0, 2, 1, 3, 0]

    我可以做到:

    word = "blahbla"
    symbols = ["a", "b", "h", "l"]
    trans_table = {s: i for i, s in enumerate(symbols)}
    word = [trans_table[letter] for letter in word]
    

    编辑 我之前说过,这个表将保持不变,实际上,我在处理我所有的单词之前计算了下表:

    symbols = [' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
               'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
               'x', 'y', 'z', 'à', 'â', 'ç', 'è', 'é', 'ê', 'î', 'ï', 'ô',
               'û', 'ü']
    

    2 回复  |  直到 8 年前
        1
  •  1
  •   jpp    8 年前

    给定一串长度 n个 n个 )复杂性。我能看到的唯一改进是使用 map 具有内置函数的运算符,在本例中 dict.__getitem__ . 这将证明比使用列表理解略为有效:

    symbols = ["a", "b", "h", "l"]
    trans_table = {s: i for i, s in enumerate(symbols)}
    
    word = "blahbla" * 100000
    
    %timeit [trans_table[letter] for letter in word]  # 67.6 ms
    %timeit list(map(trans_table.__getitem__, word))  # 59.3 ms
    
        2
  •  0
  •   Skam    8 年前

    你…吗 需要 创建自己的映射?为什么不直接用 ord 将unicode字符转换为其整数值的函数?

    > word = 'foo'
    > list(map(ord, word))
    [102, 111, 111]