鱼C论坛

 找回密码
 立即注册
查看: 1553|回复: 4

[已解决]列表内元素交换的问题,每日1题第12题

[复制链接]
发表于 2017-11-21 06:32:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''题目:输入数组,最大的与第一个元素交换,
最小的与最后一个元素交换,输出数组。'''
l1=[[0,1,1,1,4],[0,1,1,4,1],[1,0,1,1,4],[1,0,1,4,1],[4,0,1,1,1],[4,1,1,1,0]]
def x(l):
    i1=l.index(max(l))
    i2=l.index(min(l))
    l[0],l[i1],l[i2],l[-1]=l[i1],l[0],l[-1],l[i2]
    print(l,'--改变排序的结果')

for i in l1:
    print(i)
    x(i)


为什么输出第二与第三项会排错?

最佳答案
2017-11-21 09:54:18
问题在于换完位置之后,有可能交换的就是最大值或者最小值,那么原来的位置索引就不对了。
这里我给出一种解决方法,先获取最大的交换,在获取最小的交换,避免先获取的冲突问题。
l1=[[0,1,1,1,4],[0,1,1,4,1],[1,0,1,1,4],[1,0,1,4,1],[4,0,1,1,1],[4,1,1,1,0]]
def x(l):
    i1=l.index(max(l))
    temp = l[0]
    l[0] =l[i1]
    l[i1]= temp

    i2=l.index(min(l))
    temp = l[-1]
    l[-1]=l[i2]
    l[i2]= temp
    
    print(l,'--改变排序的结果')

for i in l1:
    print(i)
    x(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-21 09:54:18 | 显示全部楼层    本楼为最佳答案   
问题在于换完位置之后,有可能交换的就是最大值或者最小值,那么原来的位置索引就不对了。
这里我给出一种解决方法,先获取最大的交换,在获取最小的交换,避免先获取的冲突问题。
l1=[[0,1,1,1,4],[0,1,1,4,1],[1,0,1,1,4],[1,0,1,4,1],[4,0,1,1,1],[4,1,1,1,0]]
def x(l):
    i1=l.index(max(l))
    temp = l[0]
    l[0] =l[i1]
    l[i1]= temp

    i2=l.index(min(l))
    temp = l[-1]
    l[-1]=l[i2]
    l[i2]= temp
    
    print(l,'--改变排序的结果')

for i in l1:
    print(i)
    x(i)

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
编程新血 + 1 + 1 明白了,多谢指点。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-21 14:19:42 | 显示全部楼层
问题的关键在于:
你取最大最小值对应的索引值可能恰恰就是首元素或尾元素
而你是先就确定了最大最小值的索引值,如果进行过交换,很有可能将原本的最大最小值换了位置(索引值)
此时还是原来的索引,结果就会出错

避免的方法就可以是楼上的那种方式,或者加上条件判断,在极值不是首尾的时候采用这种写法

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
编程新血 + 1 + 1 谢谢,我知道了。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-11-21 14:26:41 | 显示全部楼层
其实你不仅仅2,3出错。只不过因为你这个数字看不出来。你可以试试
l1=[[0,3,1,1,4],[0,1,1,4,2],[1,0,2,1,4],[2,0,1,4,1],[4,0,1,1,3],[4,1,2,1,0]]
出错是出错在列表是可变类型。
上面那位是一种思路,我给你另外一个思路。既然list是可变,那我就直接把最大最小取出并从列表中移除,再在第一个位置加入最大,最后加入最小值。
s=[[0,3,1,1,4],[0,1,1,4,2],[1,0,2,1,4],[2,0,1,4,1],[4,0,1,1,3],[4,1,2,1,0]]
for i in s:
    a = max(i)
    b = min(i)
    i.remove(b)
    i.remove(a)
    i.insert(0,a)
    i.append(b)
    print(i)

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
编程新血 + 1 + 1 感谢解惑。

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-22 19:19:49 | 显示全部楼层
l1=[[0,1,1,1,4],[0,1,1,4,1],[1,0,1,1,4],[1,0,1,4,1],[4,0,1,1,1],[4,1,1,1,0]]
def x(L):
    i1=L.index(max(L))
    temp = L[0]
    L[0] =L[i1]
    L[i1]= temp

    i2=L.index(min(L))
    temp = L[-1]
    L[-1]=L[i2]
    L[i2]= temp
      
    print(L,'--改变排序的结果','--->\n')

for i in l1:
     print(i,'\n')

     x(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表