我试图将列表中的所有零移动到行的后面,我唯一的问题是列表中有一个假布尔值.我刚刚发现False == 0,那么如何将所有零移动到列表的后面并保持完整的虚假?
def move_zeros(array):
#your code here
for i in array:
if i == 0:
array.remove(i)
array.append(i)
answer = array
print answer
Run Code Online (Sandbox Code Playgroud)
move_zeros(["a",0,0,"b",None,"c","d",0,1,False,0,1,0,3,[],0,1,9,0,0,{},0,0,9])
这是它运行时返回的内容.
['a', 'b', None, 'c', 'd', 1, 1, 3, [], 1, 9, {}, 9, 0, 0, 0, 0, 0, False, 0, 0, False, 0, 0]
Run Code Online (Sandbox Code Playgroud)
你正在做的基本上是一种自定义排序.所以只需这样实现:
array.sort(key=lambda item: item is 0)
Run Code Online (Sandbox Code Playgroud)
这意味着"将数组转换为布尔值,其中0的项为True,其他所有项都为False." 然后,对这些布尔值进行排序会将所有False值放在左侧(因为它们类似于0),并将右侧的True值放入(如1).
最初我编写了一个Python 3不支持的解决方案:
array.sort(lambda L,R: -1 if R is 0 else 0)
Run Code Online (Sandbox Code Playgroud)
这意味着"如果R为0,则L小于R".然后我们按照那个排序.所以我们最终得到右边的任何零,因为任何东西都比他们少.但是,上述仅适用于Python 2.
for i in array:
if i == 0 and i is not false:
array.remove(i)
array.append(i)
answer = array
print answer
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2401 次 |
| 最近记录: |