如何将零放在列表顶部,将 1 放在最后?

  • 本文关键字:最后 顶部 列表 python list
  • 更新时间 :
  • 英文 :


我写了一段代码,将0放在列表的顶部,1放在列表的末尾,但这增加了空间和时间的复杂性。如何降低代码的复杂性。

代码:

array = [0, 1, 0, 1, 1, 0]
new_list = []
new_list1 = []
for i in array:
if i == 0:
new_list.append(i)
else:
new_list1.append(i)
print(new_list + new_list1)

如果输出需要[0, 0, 0, 1, 1, 1]

你可以这样做:

In [17]: 
array = [0, 1, 0, 1, 1, 0]
print([0] * array.count(0) + [1] * array.count(1))

Out[17]: [0, 0, 0, 1, 1, 1]

稍微修改一下你的代码:

array = [0, 1, 0, 1, 1, 0]
new_list = []
for i in array:
if i == 0:
new_list.append(i)
new_list.extend(1 for _ in range(len(array) - len(new_list)))
print(new_list)

打印:

[0, 0, 0, 1, 1, 1]

另一种不计数和保留循环的方法是:

array = [0, 1, 0, 1, 1, 0]
new_list = []
for val in array:
if val == 1:
new_list.append(1)
else:
new_list.insert(0, 0)
>> [0, 0, 0, 1, 1, 1]

with sum(如果您被允许使用sum,从问题中不清楚)

array = [0, 1, 0, 1, 1, 0]
n_ones = sum(array)
new_array = [0 for _ in range(len(array) - n_ones)] + [1 for _ in range(n_ones)]

关于布尔值的注释在python中,布尔值被认为是数值类型,所以你也可以做算术运算。只使用0和1作为整数,所以更结构化的数据比布尔TrueFalse更能提高性能"缺乏"。

还要注意python将布尔状态视为字面值!

布尔方法

array = [0, 1, 0, 1, 1, 0]
n_ones = len([True for _ in array if bool(_)])
new_array = [0 for _ in range(len(array) - n_ones)] + [1 for _ in range(n_ones)]

相关内容

最新更新