假设我有一个单词列表:
l = ['example', 'to', 'a', 'list', 'of', 'words']
我得到一个索引I,比方说10
。
我需要的是返回l
中包含第I个字符的单词内字母的索引
所以在10的例子中,因为第10个元素(基于零(是单词list
中的l
,所以我需要返回的是0,因为l
是单词中的第一个字母。
例如,对于i=17,输出将为1
,因为17指的是words
-中的字母o
,而words
中的o
的索引为1。
Iv一直在想一个简单的方法来做这件事,但我没有找到优雅的东西。
任何帮助都将不胜感激!
我问了一个类似的问题,在这里得到了很好的答案:
类似问题
但是找不到一个好的方法来修改我在这里需要的答案。
您在上一个问题中接受的解决方案(查找单词(:
c = count()
print(next(s for s in l for _, i in zip(s, c) if i == 10))
解决新问题的小修改(在单词中查找索引(:
c = count()
print(next(j for s in l for j, i in zip(range(len(s)), c) if i == 10))
解决方案可能比公认的解决方案简单得多(l
是你的单词欲望,i
是字母的索引(:
from string import ascii_lowercase as alphabet
result = next((idx for idx, x in enumerate(l) if alphabet[i] in x), None)
你可以使用任何字母表(在这种情况下,我使用了'abcdefghijklmnopqrstuvwxyz'
(。此外,为next
函数设置默认值也很重要,否则可能会出现异常。
l = ['example', 'to', 'a', 'list', 'of', 'words']
index = 10
fl = [(c[1], c[0], w[1], w[0]) for w in enumerate(l) for c in enumerate(w[1])]
print('char = ' + fl[index][0] +
', index in word = ' + str(fl[index][1]) +
', word = ' + fl[index][2])
# char = l, index in word = 0, word = list
如果你只需要单词中的索引:
fl2 = [c[0] for w in enumerate(l) for c in enumerate(w[1])]
print('index in word = ' + str(fl2[index]))
# index in word = 0