You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表首尾元素交换:预定义列表可行,随机生成列表失效问题排查

列表首尾交换函数异常问题分析

我尝试编写Python程序实现列表首尾元素交换功能,使用预定义列表时代码运行正常,代码及输出如下:

def swapFirstAndLast(list_to_be_swapped):
    size = len(list_to_be_swapped)
    list_to_be_swapped[0],list_to_be_swapped[size-1] = list_to_be_swapped[size-1],list_to_be_swapped[0]
    return list_to_be_swapped

l = [12,33,42,76,46,97]
swapFirstAndLast(l)
print(l)

输出:

[97, 33, 42, 76, 46, 12]

但当我拆分出随机生成列表的函数和交换函数后,交换操作却未生效,代码及输出如下:

import random

def generateList(size):
    list1 = []
    for i in range(size):
        list1.append(random.randint(0,99))
    return list1

def swapFirstAndLast(list_to_be_swapped):
    size = len(list_to_be_swapped)
    list_to_be_swapped[0],list_to_be_swapped[size-1] = list_to_be_swapped[size-1],list_to_be_swapped[0]
    return list_to_be_swapped

l = generateList(5)
l1 = swapFirstAndLast(l)
print(l,l1)

输出:

[49, 78, 63, 82, 72] [49, 78, 63, 82, 72]

我无法定位问题所在,希望得到帮助。


问题原因与解决方案

你的代码逻辑本身没有错误,出现这种情况是因为随机生成的列表首尾元素恰好相等,交换操作执行后列表看起来没有变化。

可以通过在交换前打印首尾元素验证这一点:

l = generateList(5)
print("原列表首尾元素:", l[0], l[-1])
l1 = swapFirstAndLast(l)
print(l, l1)

如果首尾元素不同,交换后就能看到明显变化。

另外需要注意:列表是Python中的可变对象,swapFirstAndLast函数直接修改了传入的原列表l,所以l和l1指向的是同一个列表对象,打印结果必然完全一致。如果希望保留原列表不被修改,可以修改交换函数,创建新列表进行操作:

def swapFirstAndLast(list_to_be_swapped):
    # 处理空列表或单元素列表的情况
    if len(list_to_be_swapped) <= 1:
        return list_to_be_swapped.copy()
    new_list = list_to_be_swapped.copy()
    new_list[0], new_list[-1] = new_list[-1], new_list[0]
    return new_list

这样原列表l会保持不变,l1是交换后的新列表。

内容的提问来源于stack exchange,提问作者Zabi Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:16:00