为什么这个Python解决方案不是就地解决方案?
我在一次采访中被问到这个问题。我从招聘人员那里得到反馈,说我没有及时解决这个问题。我想知道为什么这个解决方案不到位?我错过了什么 输入是字符列表,如['h'、'o'、'w'、''、'a'、'r'、'e'、''、'y'、'o'、'u'、'?']。 输出应该是一个字符串,如?您是如何得到的为什么这个Python解决方案不是就地解决方案?,python,string,in-place,Python,String,In Place,我在一次采访中被问到这个问题。我从招聘人员那里得到反馈,说我没有及时解决这个问题。我想知道为什么这个解决方案不到位?我错过了什么 输入是字符列表,如['h'、'o'、'w'、''、'a'、'r'、'e'、''、'y'、'o'、'u'、'?']。 输出应该是一个字符串,如?您是如何得到的 charArr = ['h','o','w',' ','a','r','e',' ','y','o','u','?'] #output = ?you are how class Solution(): d
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)
就地解决方案永远不会为作为参数传递的列表分配新值,因为如果这样做,调用方传递的列表值在调用后不会发生更改 您可以看到,在发布代码后执行
打印(charArr)
时,它只会打印原始列表
您可以使用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"
@这是什么问题的解决方案?一个“就地”解决方案不会像您在
reverseStr
函数的第一行中那样将新值重新分配给charArr
,而是对其进行变异(更改列表索引处的值)。@blue\u note用输入和输出更新了问题。@blue\u注意这一点,可能:单词的长度总是一样的吗?谢谢你的解释。