在Python中使用string.join()时的TypeError

时间:2013-06-19 19:26:02

标签: python string

我正在编写一个非常简单的函数,给定一个字符串作为输入,将字符串解析为句子,反转每个句子的单词,然后以给定的句子顺序返回反向句子。我正在努力使用string.split()string.join()内置方法,并在运行以下python程序时遇到TypeError。

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。感谢您忍受我的愚蠢。

3 个答案:

答案 0 :(得分:2)

item.split(' ').reverse()不返回列表,而是反向执行。因此,您的加入与:

相同
string.join(None, ' ')

显然是个问题。您应该使用reversed()函数:

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

而不是string.join函数,请使用较新Python版本中string类中定义的方法。

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

答案 1 :(得分: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)快。

答案 2 :(得分: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, '.') + '.'