Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我重新排列数组以使arr[i]=i的代码有什么问题?_Python_Arrays_List - Fatal编程技术网

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]