使用较大的字母缩短长的小字母字符串
Shorten long small-alphabet string using larger alphabet
我有一组 ~100 长(120 到 150 个字符)的字符串,使用 20 个字母的字母表(天然氨基酸字母表)编码。我在数据库条目中使用它们,但它们很麻烦。我想缩短(而不是压缩,因为我不关心内存大小)它们以使它们更容易:
- 视觉比较
- Copy/Paste
- 手动输入
我希望缩短它们的可行方法是将字符串转换为更大的字母表。具体来说,单个数字的集合,以及小写字母和大写字母。
例如:
# given some long string as input
shorten("ACTRYP...TW")
# returns something shorter like "a3A4n"
可能的方法
根据我对压缩的基本理解,这可以通过制作一个映射较大字母表的某些重复序列元素的查找字典来简单地完成。
相关问题
This question 似乎指向类似的方向,但正在使用 DNA 字母表,似乎实际上是在寻求压缩。
正如@thethiny 所建议的那样,哈希组合可以完成所需的缩短:
import base64
import hashlib
kinda_long = "ELYWPSRVESGTLVGYQYGRAITGQGKTSGGGSGWLGGGLRLSALELSGKTFSCDQAYYQVLSLNRGVICFLKVSTSVWSYESAAGFTMSGSAQYDYNVSGKANRSDMPTAFDVSGA"
shorter = base64.b32encode(hashlib.sha256(af.encode()).digest()).decode().strip("=")
我原来的问题提到使用 ASCII 字母表和数字。这将是一个 base 62 编码。为此存在各种库。
我有一组 ~100 长(120 到 150 个字符)的字符串,使用 20 个字母的字母表(天然氨基酸字母表)编码。我在数据库条目中使用它们,但它们很麻烦。我想缩短(而不是压缩,因为我不关心内存大小)它们以使它们更容易:
- 视觉比较
- Copy/Paste
- 手动输入
我希望缩短它们的可行方法是将字符串转换为更大的字母表。具体来说,单个数字的集合,以及小写字母和大写字母。
例如:
# given some long string as input
shorten("ACTRYP...TW")
# returns something shorter like "a3A4n"
可能的方法
根据我对压缩的基本理解,这可以通过制作一个映射较大字母表的某些重复序列元素的查找字典来简单地完成。
相关问题
This question 似乎指向类似的方向,但正在使用 DNA 字母表,似乎实际上是在寻求压缩。
正如@thethiny 所建议的那样,哈希组合可以完成所需的缩短:
import base64
import hashlib
kinda_long = "ELYWPSRVESGTLVGYQYGRAITGQGKTSGGGSGWLGGGLRLSALELSGKTFSCDQAYYQVLSLNRGVICFLKVSTSVWSYESAAGFTMSGSAQYDYNVSGKANRSDMPTAFDVSGA"
shorter = base64.b32encode(hashlib.sha256(af.encode()).digest()).decode().strip("=")
我原来的问题提到使用 ASCII 字母表和数字。这将是一个 base 62 编码。为此存在各种库。