Если создание другого списка не представляет интереса, вы можете использовать списочные выражения:
def test2(array):
la = len(array)
return ([x for x in array if not isinstance(x,int) or x]+[0]*la)[:la]
Первая часть отфильтровывает любое целое число 0, но пропускает любой не-int.Вторая часть добавляет (слишком много) нулей и обрезает результат до первоначальной длины.
Предостережение: Это приведет к удвоению исходной длины списка в данных - поэтому неподходит для "больших" списков или списков с несколькими 0.
Использование:
k = [1,2,3,0,4,5,False,92,-3,0,1,0,0,True,[],None,True]
print(k)
print(test2(k))
Вывод:
[1, 2, 3, 0, 4, 5, False, 92, -3, 0, 1, 0, 0, True, [], None, True]
[1, 2, 3, 4, 5, 92, -3, 1, True, True, 0, 0, 0, 0, 0, 0, 0]
Доку:
- (связанный) Проверка правды - есть и другие значения, которые также являются "Ложными".