Keep Indexes Stagnant Python

时间:2017-05-31 16:13:23

标签: python arrays sorting indexing

我正在尝试对-1停滞的列表进行排序,其余的数字按高度排序。输出应为[-1,150,160,170,-1,-1,180,190]。

a = [-1, 150, 190, 170, -1, -1, 160, 180]
z = [n for n, m in enumerate(a) if m == -1]
y = sorted(a)
print(y)
print (z)

以下是结果

y=[-1, -1, -1, 150, 160, 170, 180, 190]
z=[0, 4, 5]
output should be= [-1, 150, 160, 170, -1, -1, 180, 190]

2 个答案:

答案 0 :(得分:3)

您可以对不是 -1 的元素进行排序,并将其填充回原始列表:

a = [-1, 150, 190, 170, -1, -1, 160, 180]
s = sorted(x for x in a if x != -1)
s
# [150, 160, 170, 180, 190]

for i, v in enumerate(a):
    if v != -1:
        a[i] = s.pop(0)

a
# [-1, 150, 160, 170, -1, -1, 180, 190]

答案 1 :(得分:0)

我认为没有办法使用sort来做到这一点。我以为你可以这样做:

nOnes = []
for i,k in enumerate(a):
    if k == -1:
        nOnes.append((i,a.pop(i)))
y = sorted(a)
for m,n in nOnes:
    y.insert(m,n)

它不是令人难以置信的pythonic,但它确实有效。