Python 我重新排列数组以使arr[i]=i的代码有什么问题?
我想重新排列数组,使每个元素都位于其索引中。或者在程序结果中,如果Python 我重新排列数组以使arr[i]=i的代码有什么问题?,python,arrays,list,Python,Arrays,List,我想重新排列数组,使每个元素都位于其索引中。或者在程序结果中,如果元素存在于该数组中:输出数组[element]=元素位于其位置,否则输出数组[element]=-1 例如,如果输入数组为: a= [-1,-1,6,3,5,9,1,0,8,2] 那么输出是: output_array= [0,1,2,3,-1,5,-1,-1,8,9] 如您所见,如果我们忽略此数组中的-1:那么输出数组将被排序 这是一个Python3代码。它正在正确打印某些元素,但不是全部 def solve(a):
元素
存在于该数组中:输出数组[element]=元素
位于其位置,否则输出数组[element]=-1
例如,如果输入数组为:
a= [-1,-1,6,3,5,9,1,0,8,2]
那么输出是:
output_array= [0,1,2,3,-1,5,-1,-1,8,9]
如您所见,如果我们忽略此数组中的-1
:那么输出数组将被排序
这是一个Python3代码。它正在正确打印某些元素,但不是全部
def solve(a):
n = len(a)
for i in range (n):
if i in a:
a[i] = i
else:
a[i] = -1
print(a)
a= [-1,-1,6,3,5,9,1,0,8,2]
solve(a)
问题:
问题是,如果索引中的元素不存在,它将替换为-1
当代码尝试检查5时,在上一步中,5已被-1替换(a[4]=-1
(因为4不在列表中),这将替换5)。对于其余的异常情况也是如此
为了更好地了解发生了什么,请添加一些print
s:
def solve(a):
n = len(a)
for i in range(n):
if i in a:
a[i] = i
print(a)
print(i)
else:
a[i] = -1
print(a)
解决方案:
一种解决方案是使用列表理解,它在一行中完成这项工作,而且速度非常快:
[i if i in a else -1 for i in range(len(a))]
在功能上:
def solve(a):
return [i if i in a else -1 for i in range(len(a))]
并称之为:
>>> solve([-1,-1,6,3,5,9,1,0,8,2])
[0, 1, 2, 3, -1, 5, 6, -1, 8, 9]
考虑到您试图实现一个数组,数组中的元素被排列到各自的索引值中
这里发生的事情是,由于列表是一种可变数据类型,每次迭代都会覆盖您的数据,因此并非所有的值都被排列
例如,从i=0运行到i=3的循环之后的列表变为
[0,1,2,3,5,9,1,0,8,2]
您看到由于列表中的更改而丢失了一些数据,如6,请尝试使用不同的列表来存储更改 关键是当我达到6时,6不再是a中的6,因为当我2岁时,a[2]被设置为-1!您应该首先将a复制到b中,如果我在b中,您的条件应该是,而不是。如果我在a中,使用了另一个列表,您可以使用另一个数组,这无关紧要
def solve(a):
n=len(a)
c=[]
对于范围(n)中的i:
如果我在a:
c、 附加(i)
其他:
c、 附加(-1)
印刷品(a)
印刷品(c)
a=[-1,-1,6,3,5,9,1,0,8,2]
解决(a)
和输出:
[1,-1,6,3,5,9,1,0,8,2]
[0,1,2,3,-1,5,6,-1,8,9]
您的代码有什么问题?
在代码的这一部分:您更改了正向索引i
中的元素,并且正在更改它们,您丢失了它们,并且无法在for
循环的剩余索引中找到它们
如果我在a中:
a[i]=i
其他:
a[i]=-1
结果:
[0, -1, 2, 3, 4, 5]
我只是想了解他想要实现什么你的预期输出是什么?我想他想把它排序为arr[I]=I
。比如说,arr[0]=0
@franciscocouzojist要添加,修复它只需要更改另一个列表,而不是a
。您的解决方案给出的结果与我的结果不同:[0,1,2,3,-1,8,9]
vs[0,1,2,3,-1,5,6,-1,8,9]
。
[0, -1, 2, 3, 4, 5]