python列表:⽣成⼀个包含20个随机数的列表,然后对其中偶数下标的元素进⾏降序排列,奇。。。
解题思路:
先通过切⽚,将随机数列表分成a=sorted(x[0::2]),b=x[1::2]两个⼦列表。再通过两层for循环,每次逐⼀向空列表c中添加元素,再第⼆层循环中通过break达到添加⼀个元素就退出的⽬的。
问题代码:
import random
x=[random.randint(1,100) for i in range(20)] #⽣成20个随机数列表
print("排序前:",x)
a=sorted(x[0::2])
print("偶数下标:",a)
b=(x[1::2])
print("奇数下标:",b)
c=[] #创建空列表⽤来存放排序后的列表
for i in a:
c.append(i) #将i添加到列表c末尾
for j in b:
c.append(j) #同上
break #直接结束本轮循环
print("排序后",c)
运⾏结果:
可以发现排序后的列表发⽣了数据丢失。此时怀疑问题出现在两层for循环中,遂在for中加⼊验证:
for i in a:
c.append(i)
for j in b:
c.append(j)
print("第%d次循环后的c" %n,c)
print("现在的a",a)
print("现在的b",b)
python生成1到100之间随机数n += 1
break
运⾏结果:
可以发现,在该组随机数列表处理中,第⼀次循环后得到的是正确的结果,但在第⼆次循环中,添加的应为a中下标为2的元素12,却发⽣了跳过。在这⾥通过下标索引进⾏验证后,bug在于使⽤remove函数后,列表下标已发⽣变换,例如a[1]变为a[0]等,所以在遍历过程中才会发⽣“跳过”现象。
问题解决:将in后的范围改为a[:]
正确代码:
import random
x=[random.randint(1,100) for i in range(20)] #⽣成20个随机数列表
print("排序前:",x)
a=sorted(x[0::2])
print("偶数下标:",a)
b=(x[1::2])
print("奇数下标:",b)
c=[] #创建空列表⽤来存放排序后的列表
for i in a[:]:
c.append(i) #将i添加到列表c末尾
for j in b:
c.append(j) #同上
break #直接结束本轮循环
print("排序后",c)
运⾏结果:
问题解决啦,希望可以帮到你!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论