簡體   English   中英

將字符串轉換為整數列表

[英]Convert strings into a list of integer

我需要向量化一堆單詞,而我正在尋找更快的方法。

假設我有字符串"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', 'à', 'â', 'ç', 'è', 'é', 'ê', 'î', 'ï', 'ô',
           'û', 'ü']

每個單詞都保持不變。 對不起,如果不清楚。

給定一個長度為n的字符串,您無法提高O( 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

需要創建自己的映射嗎? 為什么不只使用ord函數將Unicode字符轉換為其整數值呢?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM