【问题标题】:why is a, b = b, a not working as the way it should be when a, b are subarrays with different lengths?当 a, b 是长度不同的子数组时,为什么 a, b = b, a 不能正常工作?
【发布时间】:2023-01-14 08:32:44
【问题描述】:

作为 Python 的新手,我将 python 中的 a, b = b, a 理解为简单的交换,但为什么当 ab 是两个不同长度的子数组时,它的行为并不像我预期的那样?

例如:

nums = [1, 2, 3, 4, 5, 6, 7]

nums[0:4], nums[4:] = nums[4:], nums[0:4]

print(nums)  #[5, 6, 7, 5, 1, 2, 3, 4]

为什么在 7 之后有一个重复的 5?为什么不是 [5, 6, 7, 1, 2, 3, 4] 因为我刚刚将 nums 分成 2 个子数组并交换了它们的顺序?

谢谢!

【问题讨论】:

  • 您不是将具有 4 个元素的 nums[0:4] 替换为具有 3 个元素的 nums[4:] 吗?

标签: python list swap sublist


【解决方案1】:

nums[4:] 不包含四的索引,只获取数组的 [5,6,7] 部分。因此,您仅用 nums 的后 3 个元素替换 nums 的前四个元素,然后用四个元素放置后 3 个元素。这让你得到 len(nums) == 8 而不是最初的 7。你永远不会覆盖 nums[4] 的值,即 5。

【讨论】:

  • “所以你只用 nums 的最后 3 个元素替换 nums 的前四个元素,然后用四个元素放置最后 3 个元素”——如果是这样的话,列表最后仍然有 7 个元素。
【解决方案2】:

反其道而行之,它起作用了:

nums[4:], nums[0:4] = nums[0:4], nums[4:]

# nums is [5, 6, 7, 1, 2, 3, 4]

【讨论】:

    猜你喜欢
    • 2014-03-29
    • 2021-10-06
    • 2019-10-27
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2011-08-10
    • 2010-12-08
    • 2021-09-10
    相关资源
    最近更新 更多