2013-06-19 26 views
1

我正在寫一個非常簡單的函數,它給出一個字符串作爲輸入,將字符串解析爲句子,反轉每個句子的單詞,並返回反轉的句子,但在給定的句子順序。我正在努力處理string.split()string.join()內置方法,並且在運行以下python程序時出現TypeError錯誤。在Python中使用string.join()時的類型錯誤

import string 

def reverseSentences(str): 
    senList = str.split('.') 
    for i, item in enumerate(senList[:]): 
     senList[i] = string.join(item.split(' ').reverse(), ' ') 
    return string.join(senList, '.') + '.' 

當我嘗試打印對這個函數的調用時,它給了我一個泛型TypeError。感謝你忍受我的恩惠。

+1

'string.join'是舊的冗餘代碼(在較新的Python版本刪除) - 使用'」」。加入(逆轉(...))' – delnan

回答

1

嘗試

>> str = 'a1 b2' 
>> ' '.join(x[::-1] for x in str.split()) 
'1a 2b' 

在函數形式:

def reverseSentences(str): 
    return ' '.join(x[::-1] for x in str.split()) 

注意x[::-1]reversed()Reverse a string in Python)的方式快。

+1

我認爲,OP只需要 - '''.join(str.split()[:: - 1])''。你正在倒轉每個單詞。 –

+0

你是對的!這個描述讓我感到困惑,「把每個句子的單詞顛倒過來」。而OP沒有給出一個示例輸入/輸出。無論如何,快速編碼很有趣:) –

2

item.split(' ').reverse()不返回列表,而是反過來。所以,你的加入是一樣的:

string.join(None, ' ') 

很明顯是一個問題。你還是使用reversed()功能:

string.join(reversed(item.split(' ')), ' ') 

而不是string.join功能,使用較新的Python版本中string類中定義的方法。

' '.join(reversed(item.split(' ')) 
0

在行:

senList[i] = string.join(item.split(' ').reverse(), ' ') 

.reverse()在列表對象本身,而是相反的項目沒有返回,所以你不能使用加入這種方式。

把這條線有兩種:

import string 

def reverseSentences(text): 
    senList = text.split('.') 
    for i, item in enumerate(senList[:]): 
     splited = item.split(' ') 
     splited.reverse() 
     senList[i] = string.join(splited, ' ') 
    return string.join(senList, '.') + '.'