python - 为什么这个 Python 解决方案不是就地解决方案?
问题描述
我在一次采访中被问到这个问题。我从招聘人员那里得到反馈,说我没有解决这个问题。我想知道为什么这个解决方案没有到位?我在这里错过了什么?
输入是字符列表,如 ['h','o','w',' ','a','r','e',' ','y','o','u',' ?']。输出应该是一个字符串,如 ?you are how。
charArr = ['h','o','w',' ','a','r','e',' ','y','o','u','?']
#output = ?you are how
class Solution():
def reverseStr(self,charArr):
charArr = ''.join(charArr).split()[::-1]
for i in range(len(charArr)):
if not charArr[i][-1].isalnum():
charArr[i] = charArr[i][-1] + charArr[i][:-1]
print ' '.join(charArr)
s1 = Solution()
s1.reverseStr(charArr)
解决方案
就地解决方案永远不会为作为参数传递的列表分配新值,因为如果这样做,调用者传递的列表的值在调用后不会改变。
您可以看到,在print(charArr)
您发布的代码之后执行 a 时:它只会打印原始列表。
您可以使用该reverse()
方法反转列表中的值。此外,该语法list[start:end] = ...
可用于就地改变列表。
以下是您可以正确解决挑战的方法:
def reverseStr(charArr):
charArr.reverse() # this is in-place
start = 0
for end in range(1, len(charArr)+1):
if end >= len(charArr) or charArr[end].isalnum() != charArr[end-1].isalnum():
charArr[start:end] = charArr[start:end][::-1] # in-place reversal of word
start = end
charArr = ['h','o','w',' ','a','r','e',' ','y','o','u','?']
reverseStr(charArr)
print (charArr) # important to test that charArr changed == proof of "in-place"
推荐阅读
- php - Unexpected error after transfering website to new server - mix of php and html in IF
- c - 代码运行时输出错误,链表有问题?
- python - 重定向到要解析的新 URL
- docker - 从 docker 启动 Kafka 的困难
- sql - 在 Oracle 中使用 NVL 失败
- javascript - InDesign--根据变量显示/隐藏放置的插图文件的图层
- php - 长时间使用后无法登录我的 codeigniter 应用程序
- r - 在动物园(或数据框)对象中计数 0
- python - 请求期间 urllib 的内存使用情况
- c# - 通过在 IIS 上运行的文件为 .Net 控制台应用程序构建解决方案文件