Python 对数组进行给定范围的三向划分
给定一个数组和数组的范围[startval, endval],将数组分为三部分。
- 所有小于startval的元素排在最前面。
-
所有在startval和endval之间的元素排在其后。
-
所有大于endval的元素排在最后面。
假设我们有以下输入 –
A = [1, 14, 51, 12, 4, 2, 54, 20, 87, 98, 3, 1, 32]
startval = 14, endval = 54
输出应为 −
A = [1, 12, 4, 2, 3, 1, 14, 51, 20, 32,54, 87, 98]
数组的三分法:使用列表推导法
在这个示例中,我们将看到如何在给定范围内对数组进行三分法-
示例
def partition_array(input, lowVal, highVal):
# Separate input list in three parts
my_first = [ num for num in input if num<lowVal ]
my_second = [ num for num in input if (num>=lowVal and num<=highVal) ]
my_third = [ num for num in input if num>highVal ]
# Concatenate all the three parts
print(my_first + my_second + my_third)
# Driver program
if __name__ == "__main__":
my_input = [10, 140, 50, 200, 40, 20, 540, 200, 870, 980, 30, 10, 320]
my_lowVal = 140
my_highVal = 200
partition_array(my_input, my_lowVal, my_highVal)
输出
[10, 50, 40, 20, 30, 10, 140, 200, 200, 540, 870, 980, 320]
在while循环中将数组围绕给定范围进行三路划分
在这个示例中,我们将看到如何使用while循环将数组围绕给定范围进行三路划分 –
示例
def partitionFunc(my_input, n, lowVal, highVal):
begn = 0
end = n - 1
i = 0
# Looping
while i <= end:
if my_input[i] < lowVal:
my_input[i], my_input[begn] = my_input[begn], my_input[i]
i += 1
begn += 1
elif my_input[i] > highVal:
my_input[i], my_input[end] = my_input[end], my_input[i]
end -= 1
else:
i+=1
# Driver code
if __name__ == "__main__":
my_input = [1, 14, 51, 12, 4, 2, 54, 20, 87, 98, 3, 1, 32]
n = len(my_input)
partitionFunc(my_input, n, 14, 54)
for i in range(n):
print(my_input[i], end = " ")
输出
1 12 4 2 1 3 54 20 32 51 14 98 87
极客笔记