程序假设根据" 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)
问题在于我无法弄清楚如何移动原始数字一旦被移动,并且在这样的列表中,如果有一个重复的数据透视值,当数字出现时等于它将枢轴移动到前面并将其视为新枢轴。我是以错误的方式来做这件事的吗?
答案 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]
索引是从零开始的。
删除列表中给定位置的项目,然后将其返回。如果未指定索引,则a.pop()将删除并返回列表中的最后一项。 (方法签名中i周围的方括号表示该参数是可选的,而不是您应该在该位置键入方括号。您将在Python库参考中经常看到这种表示法。)