📌  相关文章
📜  Python列表理解 |围绕给定范围对数组进行三向分区

📅  最后修改于: 2022-05-13 01:55:47.889000             🧑  作者: Mango

Python列表理解 |围绕给定范围对数组进行三向分区

给定一个数组和一个范围[lowVal, highVal] ,围绕范围对数组进行分区,使数组分为三部分。
1) 所有小于lowVal的元素都排在第一位。
2) 接下来是lowVal 到 highVal范围内的所有元素。
3) 所有大于highVal的元素都出现在最后。
三组的各个元素可以以任何顺序出现。

例子:

Input: arr = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32]  
        lowVal = 14, highVal = 20
Output: arr = [1, 5, 4, 2, 3, 1, 14, 20, 20, 54, 87, 98, 32]

Input: arr = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32]  
       lowVal = 20, highVal = 20       
Output: arr = [1, 14, 5, 4, 2, 3, 1, 20, 20, 54, 87, 98, 32] 

我们有解决此问题的现有解决方案,请参阅围绕给定范围链接的数组的三向分区。我们可以使用 List Comprehension 在Python中快速解决这个问题。做法很简单,

  1. 将列表分成三部分,第一个将包含小于lowVal的元素,第二个将包含介于lowValhighVal之间的元素,第三个将包含大于highVal的元素。
  2. 将所有三个部分连接在一起。
# Function for Three way partitioning of an
# array around a given range
  
def threeWay(input, lowVal, highVal):
  
# separate input list in three parts
     first = [ num for num in input if num=lowVal and num<=highVal) ]
     third = [ num for num in input if num>highVal ]
  
# concatenate all three parts
     print(first + second + third)
  
# Driver program
if __name__ == "__main__":
    input = [1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32]
    lowVal = 14
    highVal = 20
    threeWay(input, lowVal, highVal)

输出:

[1, 5, 4, 2, 3, 1, 14, 20, 20, 54, 87, 98, 32]