在Python中获取字符串中字符的索引

时间:2018-10-04 22:28:51

标签: python python-3.x python-3.6

我要解决的问题是:我有一个字符串,例如"abcabcdefdefjhi"。我希望结果是这样的数字输出:

a: 0, 3
b: 1, 4
c: 2, 5
.
.
.

P.S。该字符串是阿拉伯语,但对于了解阿拉伯语和英语的用法仍然很有帮助。

5 个答案:

答案 0 :(得分:1)

一行:

c = "abcabcdefdefjhi"
print "\n".join(["%s: %s" %( e, ", ".join([ str(j) for j, e2 in enumerate(c) if e2==e]) ) for i, e in enumerate(sorted(set(c)))])

1)不重复的列表:

sorted(set(c))
  

['a','b','c','d','e','f','h','i','j']

2)按字母顺序列出职位

[ (i, e) for i, e in enumerate(sorted(set(c)))]
  

[(0,'a'),(1,'b'),(2,'c'),(3,'d'),...,(6,'h'),(7 ,“ i”),(8,“ j”)]

3)按字母分组职位:

[( e, [ j for j, e2 in enumerate(c) if e2==e] ) for i, e in enumerate(sorted(set(c)))]
  

[('a',[0,3]),('b',[1,4]),('c',[2,5]),...,('i',[ 14]),('j',[12])]

4)减少为一行

print "\n".join(["%s: %s" %( e, ", ".join([ str(j) for j, e2 in enumerate(c) if e2==e]) ) for i, e in enumerate(sorted(set(c)))])
  

a:0、3

     

b:1、4

     

c:2、5

     

d:6,9

     

e:7、10

     

f:8、11

     

h:13

     

i:14

     

j:12

答案 1 :(得分:0)

使用枚举,如下所示:

def findOccurrences(s, ch):
    return [i for i, letter in enumerate(s) if letter == ch]


print(findOccurrences('abcabcdefdefjhi', 'a'))

输出:

[0, 3]

答案 2 :(得分:0)

列表字典可能比较合适,可以将字母映射到索引列表:

s = "abcabcdefdefjhi"
indices = {}

for i, l in enumerate(s):
    if l not in indices:
        indices[l] = []

    indices[l].append(i)

for k, v in indices.items():
    print("{}: {}".format(k, str(v)[1:-1]))

输出:

a: 0, 3
b: 1, 4
c: 2, 5
d: 6, 9
e: 7, 10
f: 8, 11
j: 12
h: 13
i: 14

或者,用"لوحة المفاتيح ال"进行测试:

ل: 0, 6, 15
و: 1
ح: 2, 12
ة: 3
 : 4, 13
ا: 5, 9, 14
م: 7
ف: 8
ت: 10
ي: 11

Try it

答案 3 :(得分:0)

轻松尝试:

 for index,i  in enumerate(s,0):
     print index, ':',i

输出:

答案 4 :(得分:0)

使用集合

中的 defaultdict
from collections import defaultdict

s = 'abcabcdefdefjhi' 
dd = defaultdict(list)

for i, v in enumerate(s):
    dd[v].append(i)

for k, v in dd.items():
    print('{}: {}'.format(k, ', '.join(list(map(str,v)))))
a: 0, 3
b: 1, 4
c: 2, 5
d: 6, 9
e: 7, 10
f: 8, 11
j: 12
h: 13
i: 14