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
相关产品推荐
相关产品推荐

