Open meishaoming opened 4 years ago
https://leetcode-cn.com/problems/reverse-words-in-a-string/
今天的「每日一题」
我的思路:
找到每个单词的起始下标,存到列表里。最后表列表返过来,逐个取出字符串拼起来。
用 python 的话,就先 split 切出每个单词,然后 reverse 整个列表。
class Solution: def reverseWords(self, s: str) -> str: l = s.split() l.reverse() return ' '.join(l)
为什么不能写成一句话 ' '.join(s.split().reverse())?
' '.join(s.split().reverse())
因为 l.reverse() 方法是原地反转,它并不返回反转后的对象。所以 s.split().reverse() 这句话实际执行了反转,但没有返回值(没有返回值的时候就是默认返回值 None)。 ' '.join() 函数拿到的参数是 None。
s.split().reverse()
' '.join()
看了一下答案,同样的方法,另两种写法更老练:
class Solution: def reverseWords(self, s: str) -> str: return ' '.join(s.split()[::-1])
class Solution: def reverseWords(self, s: str) -> str: return ' '.join(reversed(s.split()))
有三种常用反转方法
list.reverse()
[::-1]
reversed()
list.reverse() 是 List 对象原地反转,注意它并不返回对象,它实上它没有返回值(所以返回值是默认的 None)。str 没有 reverse() 方法。
[::-1] 这个操作叫作「切片」(slicing),会返回一个新的对象。str 和 list 都可以用(可迭代对象都可以用)。
reversed() 是一个内置函数,它的返回值是一个迭代器 iterator。引用一下标准库文档里的解释:
reversed(seq) 返回一个反向的 iterator。 seq 必须是一个具有 reversed() 方法的对象或者是支持该序列协议 (具有从 0 开始的整数类型参数的 len() 方法和 getitem() 方法)。
https://leetcode-cn.com/problems/reverse-words-in-a-string/
今天的「每日一题」
我的思路:
找到每个单词的起始下标,存到列表里。最后表列表返过来,逐个取出字符串拼起来。
解法一
用 python 的话,就先 split 切出每个单词,然后 reverse 整个列表。
为什么不能写成一句话
' '.join(s.split().reverse())
?因为 l.reverse() 方法是原地反转,它并不返回反转后的对象。所以
s.split().reverse()
这句话实际执行了反转,但没有返回值(没有返回值的时候就是默认返回值 None)。' '.join()
函数拿到的参数是 None。看了一下答案,同样的方法,另两种写法更老练:
2
3
python 的反转方法对比
有三种常用反转方法
list.reverse()
[::-1]
reversed()
list.reverse()
是 List 对象原地反转,注意它并不返回对象,它实上它没有返回值(所以返回值是默认的 None)。str 没有 reverse() 方法。[::-1]
这个操作叫作「切片」(slicing),会返回一个新的对象。str 和 list 都可以用(可迭代对象都可以用)。reversed() 是一个内置函数,它的返回值是一个迭代器 iterator。引用一下标准库文档里的解释: