使用重复的字符查找字符串中的索引

时间:2014-06-13 04:51:43

标签: python string

我有字符串a='51545'

我正在找到字符串中每个字符的索引,如此

modchar=[{i:a.index(i)} for i in a ]

#modchar=[{'5': 0}, {'1': 1}, {'5': 0}, {'4': 3}, {'5': 0}]

但我需要将其作为

#modchar=[{'5': 0}, {'1': 1}, {'5': 2}, {'4': 3}, {'5': 4}]

我们如何实现这一目标?

2 个答案:

答案 0 :(得分:10)

在这种情况下,您可能希望enumerate创建字典的字符串:

[{c: i} for i, c in enumerate(a)]

请注意,作为副作用,这发生在与原始解决方案相反的O(n)时间内,即O(n ^ 2)

答案 1 :(得分:3)

试试这个:

a='51545'
obj = []
for i in range(len(a)):
    obj.append({a[i]: i})

运行如下:

>>> a='51545'
>>> obj = []
>>> for i in range(len(a)):
...     obj.append({a[i]: i})
... 
>>> obj
[{'5': 0}, {'1': 1}, {'5': 2}, {'4': 3}, {'5': 4}]
>>> 

您可以使用enumerate:

进行列表理解
[{value: index} for value, index in enumerate(a)]

运行方式:

>>> [{value: index} for index, value in enumerate(a)]
[{'5': 0}, {'1': 1}, {'5': 2}, {'4': 3}, {'5': 4}]
>>> 

或者,您可以使用基本列表理解:

[{a[index]: index} for index in range(len(a))]

运行方式:

>>> [{a[index]: index} for index in range(len(a))]
[{'5': 0}, {'1': 1}, {'5': 2}, {'4': 3}, {'5': 4}]
>>> 

enumerate基本上是使用for循环来获取索引,然后访问列表的组合:

>>> arr = [5, 8, 2, 4]
>>> for index, value in enumerate(arr):
...     print index, value
... 
0 5
1 8
2 2
3 4
>>>