2017-01-02 115 views
0

試圖瞭解爲什麼我的代碼返回的後續實例重複大寫字母的第一個位置的有序列表說資本:的Python:返回一個包含索引

任務: 返回包含資本的指標的有序列表在給定的字符串

我的代碼:

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]

+0

因爲這就是'索引'的作用。 https://docs.python.org/2/tutorial/datastructures.html –

+0

我猜索引13和14有相同的字母? – 2017-01-02 15:48:11

+2

'word.index'只返回第一個匹配的索引。如果單詞中有多個相同的字符,它總是返回第一個。 – czheo

回答

1

你的功能可以簡化爲:

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

這是解釋爲什麼你的方法是行不通的,它是如何被固定: 你可以給一個第二個參數index:一暗示從哪裏開始(我將當前位置作爲提示);否則,第一次出現將返回:

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

和更緊湊和Python的版本:

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

通過

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

...然後這可能實際上簡化它也適用於相鄰的相等字母:

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

爲什麼給一個名稱分配一個lambda而不是隻寫一個正常的函數定義? – wwii

+0

因爲它看起來很酷......沒有真正的......在製作中,我會將它寫入常規函數中,但我認爲每個人都在答案部分這樣做。 – 2017-01-02 18:56:01

相關問題