如何才能唯一缩短字符串列表,使其最多为x个字符

fma*_*ark 6 python language-agnostic string algorithm abbreviation

我正在寻找一种算法,它将采用字符串向量v1并返回一个类似的字符串向量,v2其中每个字符串长度小于x字符且是唯一的.字符串v1可能不是唯一的.

虽然我需要接受ASCII v1,但我宁愿只[A-Za-z0-9]在需要插入新字符时插入字母数字字符().

显然这里有三个警告:

  1. 对于某些值的v1x,没有可能的唯一v2.例如,当v1有37个元素时x == 1.

  2. 问题中指定的"类似"是主观的.字符串将是面向用户的,并且可能是短的自然语言短语(例如"颜色数").我希望人类能够尽可能容易地将原始地图映射到缩短的字符串.这可能意味着利用诸如dismvoweling等启发式方法.因为可能没有客观衡量我的相似性结构(字符串距离可能不会在这里最有用,尽管它可能),我对好的东西的判断将是任意的.该方法应适合英语 - 其他语言无关紧要.

显然这是一个(编程)语言无关的问题,但我对python中的实现很有好感(因为我发现它的字符串处理语言是直接的).

use*_*498 -1

def split_len(seq, length):
    return [seq[i:i+length] for i in range(0, len(seq), length)]
newListOfString=[]
for item in listOfStrings:
    newListOfString.append(split_len(item,8)[0])
Run Code Online (Sandbox Code Playgroud)

这将返回前八个字符。

  • 我很确定OP自己能够弄清楚这一点。另外 `[_[:8] for _ in listOfStrings]` 也会做同样的事情。 (2认同)