在多重赋值三元条件中省略一个值
Omit a Value in a Multiple-Assignment Ternary Conditional
场景:
快速排序编码挑战。
输入是两行:第 1 行 = Pivot,第 2 行是未排序的整数列表
输出是一个列表,小于主元的值向左移动,然后是主元和 >= 到主元的值。
示例:
输入:
7
1 2 4 9 3 7 11 5 12
输出:
1 2 4 3 5 7 9 11 12
我想在 Python 3 中做什么(如果可能的话):
left,right = [ (value,DO NOT ASSIGN) for value in unsortedList if value < pivot else (DO NOT ASSIGN, value)]
问题:
有没有办法做我想做的事情?我了解如何单独分配值,但很好奇是否需要在多项分配中分配一个值。
'None' 不能作为列表使用,我需要保留以前的值。
我的意思是,你可以做这样的事情,这与 filter
的效果大致相同。请注意,list(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]
但是Python中没有"DO NOT ASSIGN"句法原语。
你可以用 None
、zip
和最后的 filter
来伪造它(尽管你还必须为快速排序重新定位 7):
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))
场景:
快速排序编码挑战。
输入是两行:第 1 行 = Pivot,第 2 行是未排序的整数列表 输出是一个列表,小于主元的值向左移动,然后是主元和 >= 到主元的值。
示例:
输入:
7
1 2 4 9 3 7 11 5 12
输出:
1 2 4 3 5 7 9 11 12
我想在 Python 3 中做什么(如果可能的话):
left,right = [ (value,DO NOT ASSIGN) for value in unsortedList if value < pivot else (DO NOT ASSIGN, value)]
问题:
有没有办法做我想做的事情?我了解如何单独分配值,但很好奇是否需要在多项分配中分配一个值。
'None' 不能作为列表使用,我需要保留以前的值。
我的意思是,你可以做这样的事情,这与 filter
的效果大致相同。请注意,list(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]
但是Python中没有"DO NOT ASSIGN"句法原语。
你可以用 None
、zip
和最后的 filter
来伪造它(尽管你还必须为快速排序重新定位 7):
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))