我写了一段代码,将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作为整数,所以更结构化的数据比布尔True
和False
更能提高性能"缺乏"。
还要注意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)]