我正在做一个编码问题,目的是“编写一个函数,该函数接受一个值数组,并将所有零元素移到该数组的末尾,否则保留该数组的顺序。零元素还必须保持它们发生的顺序。”
我正在用Python测试我的代码,并遇到一个问题,我设置一个条件以在发现它们时忽略0,但该条件不起作用。是因为我正在循环中修改列表,而不在考虑更新的值吗?我可以在没有多余空间的情况下进行处理吗?
def remove_zeros(array):
for i in range(len(array)):
if array[i] != 0 or array[i] != "0":
c = array[i]
print(c) #this is printing 0, but I'm setting condition to ignore 0's!
for j in range(i, 0, -1):
if array[j - 1] == 0 or array[j - 1] == "0":
temp = array[j]
array[j] = array[j - 1]
array[j - 1] = temp
return array
input = [ 1, None, '5', '0', '2', 0, 8, 6, None, False ]
output = remove_zeros(input)
答案 0 :(得分:1)
我们可以通过多种方式解决此问题。
此方法只是弹出当前元素并将其附加到末尾。此方法确保它是相同的类型。
def remove_zeros(arr):
n = len(arr):
for i in range(n):
if arr[i] == 0 or arr[i] == '0':
# this will be a zero.
arr.append(arr.pop(i)) # remove and add it to the end.
return arr
此方法假定您可以返回任何零类型。
def remove_zeros(arr):
n = len(arr)
counter = 0
for i in range(n):
if arr[i] != 0 and arr[i] != '0':
arr[counter] = arr[i]
counter += 1
while counter < n:
arr.append(0)
counter += 1
return arr
答案 1 :(得分:0)
没关系,我必须将or条件更改为and和
答案 2 :(得分:0)
您可以按照以下方式利用sorted
来完成该任务:
ipt = [1, None, '5', '0', '2', 0, 8, 6, None, False]
opt = sorted(ipt, key=lambda x:x is 0 or x=='0')
print(opt) # [1, None, '5', '2', 8, 6, None, False, '0', 0]
请注意,这有可能要归功于以下两个事实:sorted is stable和False
被视为0
,True
被视为1
,如果需要,因此,由提供的功能标记为False
的所有元素都以True
<0
开头并1
结束。请注意,我使用is
而不是==
,因为False == 0
的计算结果为True
,而False is 0
的计算结果不是。
答案 3 :(得分:-1)
要从列表中删除项目,请使用内置的“过滤器”功能。例如,
def remove_zero(item):
return item is not 0 and item!='0'
input = [ 1, None, '5', '0', '2', 0, 8, 6, None, False ]
output = list(filter(remove_zero, input))