首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的反向字符列表的解决方案不起作用?

为什么我的反向字符列表的解决方案不起作用?
EN

Stack Overflow用户
提问于 2022-04-01 09:22:54
回答 3查看 92关注 0票数 2

我在做这个练习:

编写一个反转字符串的函数。输入字符串作为字符s的数组给出。

要做到这一点,必须修改输入数组中的O(1)额外内存.

我的解决方案不起作用:

代码语言:javascript
复制
def reverseString(s: List[str]) -> None:
    """
    Do not return anything, modify s in-place instead.
    """
    s = s[::-1]

正确答案:

代码语言:javascript
复制
def reverseString(s: List[str]) -> None:
    """
    Do not return anything, modify s in-place instead.
    """
    s[::] = s[::-1]

为什么我的解决方案行不通?

EN

回答 3

Stack Overflow用户

发布于 2022-04-01 09:43:58

表达式s::-1将创建一个新列表,其元素将反转。

然后,

代码语言:javascript
复制
s[:] = s[::-1]

...causes将复制到原列表先前占用的地址空间中的新列表。

代码语言:javascript
复制
s = s[::-1]

将对反向列表的引用分配给局部变量s。

顺便提一下,因为我不知道"O(1)额外内存“是什么意思,值得注意的是,在功能上正确的答案确实需要重复原始列表中使用的内存。

代码语言:javascript
复制
def reverseString(s):
    i = 0
    j = len(s) - 1
    while i < j:
        s[i], s[j] = s[j], s[i]
        i += 1
        j -= 1

...does并不是因为它在原地交换元素

票数 2
EN

Stack Overflow用户

发布于 2022-04-01 09:35:01

你得做个就地修改。

S[::] =正在对s的实际内存字节进行修改,而s = s[::-1]则指向变量名s而不进行任何修改。

票数 1
EN

Stack Overflow用户

发布于 2022-04-01 09:39:59

重新分配函数中的列表将不会更改原始列表、s[:] =s[::] =片分配,从而替换先前列表中的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71704644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档