使用 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 

更新于: 2022年8月12日

276 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.