在Python中创建一个矩阵,该矩阵存储字符串字符的最右边的索引

时间:2018-08-27 11:14:26

标签: python

我正在尝试创建一个矩阵,在其中存储字符串字符的最右边的索引。例如,如果我有字符串:

"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]]

希望对此有所帮助。

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默认库之一的名称。同样,为了获得更好的性能,请使用元组而不是列表(如我对答案的初始评论中提供的单行代码一样)