我正在尝试创建一个矩阵,在其中存储字符串字符的最右边的索引。例如,如果我有字符串:
"baby"
我想这样生成一个矩阵:
[['b',2],['a',1],['y',3]]
其中索引0表示字符串中非重复的字符,索引1表示字符串中字符最右的索引出现。例如,第一个字符'b'出现在索引0,但另一个出现在索引2,因此它将是2。
我尝试过类似的事情:
def str_matrix(string):
matrix = [[]]
for i in range(len(pattern)):
if pattern[i] not in matrix:
matrix.append([pattern[i],i])
else:
matrix[i][1].append(i)
print(matrix)
但是我得到了:
[[], ['b', 0], ['a', 1], ['b', 2], ['y', 3]]
希望对此有所帮助。
答案 0 :(得分:4)
您可以使用OrderedDict
进行重复数据删除:
>>> from collections import OrderedDict
>>> s = "baby"
>>> OrderedDict((k, v) for v, k in enumerate(s))
OrderedDict([('b', 2), ('a', 1), ('y', 3)])
>>> [[k,v] for k, v in OrderedDict((k, v) for v, k in enumerate(s)).items()]
[['b', 2], ['a', 1], ['y', 3]]
答案 1 :(得分:0)
也许:
txt = 'baby'
res = [[i, len(txt) - txt[::-1].find(i) - 1] for i in set(txt)]
res
# [['a', 1], ['b', 2], ['y', 3]]
答案 2 :(得分:0)
由于@Maxxx表示顺序无关紧要(但原始答案是有序的),并且Maxxx倾向于显式/可读形式(不是单行),因此我将在此处提供:
def str_matrix(string):
matrix = []
chars = set(string) # only unique letters from the string
for char in chars:
right_most_index = string.rfind(char)
matrix.append([char, right_most_index])
编辑:我建议不要使用字符串作为名称,因为字符串是python默认库之一的名称。同样,为了获得更好的性能,请使用元组而不是列表(如我对答案的初始评论中提供的单行代码一样)