Python:返回包含索引的有序列表

时间:2017-01-02 15:43:45

标签: python loops indexing iteration

试图理解为什么我的代码返回所述资本的后续实例的重复大写字母的第一个位置:

任务: 返回包含给定字符串中大写索引的有序列表

我的代码:

def capitals(word):
    cap = []
    for i in word:
        if i.isupper():
            cap.append(word.index(i))
    return cap

输出:

[1, 6, 9, 12, 13, 9]应该等于[1, 6, 9, 12, 13, 14]

3 个答案:

答案 0 :(得分:5)

这可以通过

简化实际
capitals = lambda word: [i for i,val in enumerate(word) if val.isupper()]

...然后它也适用于相邻的相同字母:

capitals("ThiSiSaTeSTT")
> [0, 3, 5, 7, 9, 10, 11]

答案 1 :(得分:1)

您的功能可以简化为:

record.getValue(Tables.B.A_ROW_ID)

答案 2 :(得分:0)

这是为了解释为什么你的方法不起作用以及如何解决它: 你可以给index提供第二个参数:从哪里开始提示(我将当前位置作为提示);否则第一次出现将被退回:

def capitals(word):
    cap = []
    for i, letter in enumerate(word):
        if letter.isupper():
            cap.append(word.index(letter, i))
    return cap

和更紧凑和pythonic版本:

def capitals(word):
    return [i for i, letter in enumerate(word) if letter.isupper()]