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中快速解决这个问题。做法很简单,
- 将列表分成三部分,第一个将包含小于lowVal的元素,第二个将包含介于lowVal和highVal之间的元素,第三个将包含大于highVal的元素。
- 将所有三个部分连接在一起。
# 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]