根据条件在列表中移动数字

时间:2018-04-04 20:53:35

标签: python python-3.x

程序假设根据" pivot"移动数字。值。列表中枢轴值前面的所有数字都需要小于或等于数据透视值,并且数据透视值后面的所有数字都大于数据透视值。 (Python 3.x)

a = [1,4,3,7,4,7,6,3,7,8,9,9,2,5]
print("Original List")
print(a)
pivot = 4 #or select any number from the list
b = list(a)

for i in range(len(a)):
    pivotIndex = b.index(pivot) #gives index of pivot through every iteration

    if a[i] > pivot:

        b.insert(pivotIndex+1,a[i])

    elif a[i] <= pivot:

        b.insert(0,a[i])

print("New List")
print(b)

问题在于我无法弄清楚如何移动原始数字一旦被移动,并且在这样的列表中,如果有一个重复的数据透视值,当数字出现时等于它将枢轴移动到前面并将其视为新枢轴。我是以错误的方式来做这件事的吗?

2 个答案:

答案 0 :(得分:0)

您可以使用列表推导来创建新列表并使用enumerate来确保您只计算在数据透视表中没有索引的元素:

a = [1,4,3,7,4,7,6,3,7,8,9,9,2,5]
pivot = 4
new_l = [c for i, c in enumerate(a) if c > a[pivot] and i != pivot] + [a[pivot]]+[c for i, c in enumerate(a) if c <= a[pivot] and i != pivot]

输出:

[7, 7, 6, 7, 8, 9, 9, 5, 4, 1, 4, 3, 3, 2

答案 1 :(得分:0)

您可以使用.pop(index)获取索引处的值,并在一个操作中将其删除:

numbers = [2,3,4,5,7]
print(numbers)
n = numbers.pop(2)
print (n)
print (numbers)

输出:

[2, 3, 4, 5, 7]
4
[2, 3, 5, 7]

索引是从零开始的。

读: list.pop([i])

  

删除列表中给定位置的项目,然后将其返回。如果未指定索引,则a.pop()将删除并返回列表中的最后一项。 (方法签名中i周围的方括号表示该参数是可选的,而不是您应该在该位置键入方括号。您将在Python库参考中经常看到这种表示法。)