排序列表并在python3中重新排列

时间:2018-10-11 11:02:14

标签: python-3.x

长度为N的元素的

列表A,范围为1 to N。数组中可能没有所有元素。如果该元素不存在,则数组中将存在-1。重新排列数组,以使A[i] = i出现,并且如果我不存在,则在该位置显示-1

我在python 3中的代码

l= list(map(int, input().split()))
p=sorted(l)
j=[z for z in range(p[0],p[-1]+1)]
for i in range(1,p[-1]):
  if i is not j:
    for d in range(p[-1]):
      j[d]=-1
print(' '.join(map(str,p)))

这是输入和预期的输出:

input: 4 7 -1 9 -1 5 3 -1 -1 -1
expected output: -1 -1 -1 3 4 5 -1 7 -1 9

输出获取:

-1 -1 -1 -1 -1 3 4 5 7 9

请让我知道我在做什么错?

1 个答案:

答案 0 :(得分:0)

有一个更简单的方法:

l = [int(i) for i in "4 7 -1 9 -1 5 3 -1 -1 -1".split()]
l  # input
Out:
[4, 7, -1, 9, -1, 5, 3, -1, -1, -1]

创建一个包含-1,长度为len(l)的列表:

p = [-1] * len(l)
p
Out: 
[-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

如果l中的元素不是p,则遍历l并将值分配给-1

for i in l:
    if i != -1:
        p[i] = i
p
Out:
[-1, -1, -1, 3, 4, 5, -1, 7, -1, 9]

这是一种更快的解决方案,因为在列表i中没有搜索元素j,并且可以提供所需的输出。

修改: 作为功​​能:

l= list(map(int, input().split()))

def rearrange(l):
    p = [-1] * len(l)
    for i in l:
        if i != -1:
            p[i] = i
    return p