2014-12-03 98 views
3

我有點小問題。添加標點符號到列表中?

我的任務是檢查文本中是否有任何重複的單詞,如果列表中有任何重複的單詞,我的工作是使用.upper()突出顯示它們。

文本示例:我喜歡蘋果,蘋果是我所知道的最好的東西。

所以我把原始文本,從標點條紋,將所有單詞轉換爲小寫,然後拆分列表。 通過for循環,我將列表中的每個單詞與對方進行了比較,並且我找到了所有重複的單詞,所有這些都放在了一個新列表中。

例子(使用for循環後):我喜歡蘋果蘋果是我知道

最好的東西所以新名單現在類似於原始名單,但有一個主要的例外,它缺少標點。

有沒有辦法在新列表中添加標點符號,如果它們是「假設爲」(從舊名單位置)? 是否有某種方法構建在python中,可以做到這一點,還是我必須將兩個列表與另一個for-loop進行比較,然後將標點符號添加到新列表中?

NewList = []#創建一個空的列表

for word in text: 
    if word not in NewList: 
     NewList.append(word) 
    elif word in NewList: # 
     NewList.append(word.upper()) 
List2 = ' '.join(NewList) 

上面的代碼適用於較長的文本和,這是我已經使用的代碼突出重複字。 唯一的問題是,標點不存在於新文件中,這是我唯一的問題。

+1

你可以在原來的文本使用['string.replace'(https://docs.python.org/2/library/string.html#string.replace),雖然與'叫它」蘋果蘋果醬''會給予''APPLES APPLES APPLESOSE''。 – 2014-12-03 16:28:40

回答

4

下面是使用sub方法與內置正則表達式模塊進行回調的示例。 此解決方案尊重所有標點符號。

import re 

txt = "I like,, ,apples, apples! is the .best. thing *I* know!!1" 


def repl(match, stack): 
    word = match.group(0) 
    word_upper = word.upper() 
    if word_upper in stack: 
     return word_upper 
    stack.add(word_upper) 
    return word 

def highlight(s): 
    stack = set() 
    return re.sub('\\b([a-zA-Z]+)\\b', lambda match: repl(match, stack), s) 

print txt 
print highlight(txt) 
+0

無法啓動它,不知道爲什麼。 – SoIsUrFace 2014-12-03 17:30:05

+0

@SoIsUrFace是否使用Python> 2.7?任何錯誤? – 2014-12-03 17:31:09

+0

奇怪,它現在工作。 但是它對我來說似乎非常先進。 我幾乎不知道基本。甚至沒有聽過re.subs和類似的東西 – SoIsUrFace 2014-12-03 17:35:21