Lev*_*ley 2 python swap list python-3.x
我需要在不同数字列表中交换max和min.像这样:
示例输入
3 4 5 2 1
Run Code Online (Sandbox Code Playgroud)
示例输出
3 4 1 2 5
Run Code Online (Sandbox Code Playgroud)
我认为使用这将是最有意义的:
a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = min(a), max(a)
Run Code Online (Sandbox Code Playgroud)
但是,它似乎适用于一些不同数字的列表,而不是其他列表(包括给定的示例).我不知道为什么.谁能看到这个bug?
在多个赋值中,Python从左到右计算所有右侧部分,然后从左到右逐个分配到左侧部分(有关详细信息,请参阅语言参考).所以:
a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = min(a), max(a)
a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = 1, max(a)
a = [3, 4, 5, 2, 1]
a[a.index(max(a))], a[a.index(min(a))] = 1, 5
a = [3, 4, 5, 2, 1]
a[a.index(5)], a[a.index(min(a))] = 1, 5
a = [3, 4, 5, 2, 1]
a[2], a[a.index(min(a))] = 1, 5
a = [3, 4, 1, 2, 1]
a[a.index(min(a))] = 5
a = [3, 4, 1, 2, 1]
a[a.index(1)] = 5
a = [3, 4, 1, 2, 1]
a[2] = 5
# ^ uh oh
a = [3, 4, 5, 2, 1]
Run Code Online (Sandbox Code Playgroud)
如果最小值在最大值之前,这可以正常工作,因为我们总是替换最小值的第一次出现,结果是原始值.
要修复它,只需在进行交换之前单独计算索引.
| 归档时间: |
|
| 查看次数: |
1471 次 |
| 最近记录: |