[英]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.