1

我正在编写一个非常简单的函数,给定一个字符串作为输入,将字符串解析为句子,反转每个句子的单词,并返回反转后的句子,但按照给定的句子顺序。我正在努力使用内置方法,并且在运行以下 python 程序时遇到 TypeError string.split()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。谢谢你忍受了我的n00bishness。

4

3 回答 3

2

item.split(' ').reverse()不返回列表,而是在原地执行相反的操作。因此,您的加入与以下内容相同:

string.join(None, ' ')

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

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

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

' '.join(reversed(item.split(' '))
于 2013-06-19T19:28:49.350 回答
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()在 Python 中反转字符串)要快得多。

于 2013-06-19T19:30:23.873 回答
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, '.') + '.'
于 2013-06-19T19:46:29.810 回答