Python 在多重赋值条件中省略一个值
场景: 快速排序编码挑战 输入是两行:第1行=枢轴,第2行是未排序的整数列表 输出是一个列表,小于轴的值向左移动,然后是轴,值>=移动到轴 示例: 输入:Python 在多重赋值条件中省略一个值,python,python-3.x,conditional,variable-assignment,Python,Python 3.x,Conditional,Variable Assignment,场景: 快速排序编码挑战 输入是两行:第1行=枢轴,第2行是未排序的整数列表 输出是一个列表,小于轴的值向左移动,然后是轴,值>=移动到轴 示例: 输入: 7 1 2 4 9 3 7 11 5 12 输出: 1 2 4 3 5 7 9 11 12 我想在Python 3中做什么(如果可能): 如果值>>枢轴=7 >>>左、右=[列表(筛选器(lambda n:n=pivot,未排序))] >>>左 [1, 2, 4, 3, 5] >>>对 [9, 7, 11, 12] 但是Python中没
7
1 2 4 9 3 7 11 5 12
输出:
1 2 4 3 5 7 9 11 12
我想在Python 3中做什么(如果可能):
如果值“None”不能作为列表使用,我需要维护以前的值 我的意思是,你可以做这样的事情,通过
过滤器
来近似相同的效果。请注意,列表(filter(…)
只是具体化过滤器,以便正确打印
>>> unsorted = [1, 2, 4, 9, 3, 7, 11, 5, 12]
>>> pivot = 7
>>> left, right = [list(filter(lambda n: n < pivot, unsorted)), list(filter(lambda n: n >= pivot, unsorted))]
>>> left
[1, 2, 4, 3, 5]
>>> right
[9, 7, 11, 12]
未排序=[1,2,4,9,3,7,11,5,12]
>>>枢轴=7
>>>左、右=[列表(筛选器(lambda n:n但是Python中没有“不指定”的语法原语 您可以使用
None
、zip
和结尾处的过滤器对其进行排序(尽管您还必须重新定位7以进行快速排序):
[1]中的:l=map(int,“1 2 4 9 3 7 11 5 12”.split())
[2]中:左,右=zip(*[(v,无)如果v<7,则为(无,v)表示l中的v])
在[3]中:左,右
出[3]:
((1,2,4,None,3,None,None,5,None),
(无,无,无,9,无,7,11,无,12))
在[4]中:过滤器(lambda x:x不是无,左),过滤器(lambda x:x不是无,右)
Out[4]:((1,2,4,3,5),(9,7,11,12))
请注意,过滤器(无,iterable)
将从iterable
中删除错误值(包括0
),这可能不利于排序算法。
In [1]: l = map(int, "1 2 4 9 3 7 11 5 12".split())
In [2]: left, right = zip(*[(v, None) if v < 7 else (None, v) for v in l])
In [3]: left, right
Out[3]:
((1, 2, 4, None, 3, None, None, 5, None),
(None, None, None, 9, None, 7, 11, None, 12))
In [4]: filter(lambda x: x is not None, left), filter(lambda x: x is not None, right)
Out[4]: ((1, 2, 4, 3, 5), (9, 7, 11, 12))