[Python3] 021 关于列表中“换位”的一些发现

Posted yorkyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python3] 021 关于列表中“换位”的一些发现相关的知识,希望对你有一定的参考价值。

关于列表中“换位”的一些发现

“缘起”

先放代码

代码 (1)

  • 目标:列表首位不是最大值时,找到最大值并与列表首位的数据交换位置
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_max = max(num_list)             # 找到最大值
max_idx = num_list.index(num_max)       # 找到最大值的索引值
num_list[0], num_list[max_idx] = num_list[max_idx], num_list[0]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [66, 3, 5, 1, 7, 9]

  • 结果:交换成功

代码 (2)

  • 目标:缩减代码 (1)
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_max = max(num_list)
num_list[0], num_list[num_list.index(num_max)] = num_list[num_list.index(num_max)], num_list[0]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [1, 3, 5, 66, 7, 9]

  • 结果:出现问题!代码 (2) 没效果!

代码 (3)

  • 目标:看看最小值与末位交换的情况
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_min = min(num_list)
num_list[-1], num_list[num_list.index(num_min)] = num_list[num_list.index(num_min)], num_list[-1]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [9, 3, 5, 66, 7, 1]

  • 结果:最小值与末位互换位置成功

代码 (4-1)

  • 将 num_list 中的 66 与其前面的数据互换位置
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_max = max(num_list)
num_list[2], num_list[num_list.index(num_max)] = num_list[num_list.index(num_max)], num_list[2]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [1, 3, 5, 66, 7, 9]

  • 结果:66 与 5 换位失败
  • 经检验,66 与其前面的 3 个数据均不能互换位置

代码 (4-2)

  • 将 num_list 中的 66 与其后面的数据互换位置
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_max = max(num_list)
num_list[4], num_list[num_list.index(num_max)] = num_list[num_list.index(num_max)], num_list[4]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [1, 3, 5, 7, 66, 9]

  • 结果:66 与 7 换位成功
  • 经检验,66 与其后面的数据均能互换位置

代码 (5)

  • 我的想法:之前一直在索引值上做文章,摆放位置有没有影响?
num_list = [1, 3, 5, 66, 7, 9]
print("排序前:", num_list)

num_max = max(num_list)
num_list[num_list.index(num_max)], num_list[0] = num_list[0], num_list[num_list.index(num_max)]

print("排序后:", num_list)

>>>
排序前: [1, 3, 5, 66, 7, 9]
排序后: [66, 3, 5, 1, 7, 9]

  • 结论:代码 (5) 与代码 (2) 仅在 x, y = y, x 的顺序上有不同,但结果却大相径庭

后记

  • 解法是知道了,但原因我还不知道,所以又到了挖坑的时间
    • 坑号编码:Py021-1

以上是关于[Python3] 021 关于列表中“换位”的一些发现的主要内容,如果未能解决你的问题,请参考以下文章

pandas相同元素不同顺序合并之移形换位

关于python3.4版本中的zip函数

关于Python2与python3共存的一点补充

Python3:关于列表的操作

关于Python3中函数:

s14 第4天 关于python3.0编码 函数式编程 装饰器 列表生成式 生成器 内置方法