Python 如何忽略False,使其不';不算作0
有没有办法使0与False不同? 因为我一直得到错误的结果,我找不到解决办法 然而Python 如何忽略False,使其不';不算作0,python,Python,有没有办法使0与False不同? 因为我一直得到错误的结果,我找不到解决办法 然而 def move_zeros(array): a = 0 for i in array: if array[a] == 0: array.remove(array[a]) array.append(0) a +=1 else: a += 1
def move_zeros(array):
a = 0
for i in array:
if array[a] == 0:
array.remove(array[a])
array.append(0)
a +=1
else:
a += 1
return array
print(move_zeros([0,1,None,2,False,1,0]))
输入数组:
[0,1,None,2,False,1,0]
[1,None,2,False,1,0,0]
预期输出:
[0,1,None,2,False,1,0]
[1,None,2,False,1,0,0]
实际输出:
[1, None, 2, 1, 0, 0, 0]
您可以检查使用的元素的类型,因此只有当元素不是bool且等于0时,才会将其删除并将0追加到列表中
def move_zeros(input):
for index, element in enumerate(input):
if element == 0 and not isinstance(element, bool):
input.pop(index)
input.append(0)
return input
print(move_zeros([0,1,None,2,False,1,0]))
布尔类型继承自int类型,因此False为0,但属于不同类型。这意味着您可以通过类型检查区分0和False。False和bool,因此为int,但0不是bool 另外,
.remove
会删除与该值相等的第一个值,因此即使使用此检查,代码也不会起作用它取第一个0,不管a
的值是多少,所以它也取False。让我们使用del
def move_zeros(array):
a = 0
for i in array:
if array[a] == 0 and not isinstance(array[a], bool):
del array[a]
array.append(0)
# a +=1 if you remove an element, next one jumps in its place, so you have to check the same index
else:
a += 1
return array
print(move_zeros([0,1,None,2,False,1,0]))
输出:
[1, None, 2, False, 1, 0, 0]
在更新列表时对其进行迭代通常会导致问题,因此您应该避免它 只需在列表中构建一个非零值列表,并附加所需的零:
def move_zeros(array):
out = [v for v in array if v != 0 or v is False]
out.extend([0] * (len(array) - len(out)))
return out
请注意,0
和False
是相等的,因此0==False
,但它们是不同的对象,因此0不是False
使用您的数据进行测试:
print(move_zeros([0,1,None,2,False,1,0]))
# [1, None, 2, False, 1, 0, 0]
另一个测试用例将失败,在更新列表时,某些解决方案会在列表上迭代:
move_zeros([0,1,None, 0, 0, 2,False,1,0])
# [1, None, 2, False, 1, 0, 0, 0, 0]
您可以使用附加子句
is not False
来区分0和False
def移动零点(数组):
如果数组[i]==0且数组[i]不为False,则zeroLocations=[i代表范围内的i(len(数组))]
zerocations.reverse()
对于零位置中的零ID:
del数组[zeroId]
array.append(0)
返回数组
<>代码>为什么不尝试用字符串“f”或“false”替换false,这将防止Python作为0@h4z3删除元素是否不好?我想知道为什么。@psn1997我正在进行代码战培训,用“F”替换它也会输出错误的结果。如果你愿意,我可以粘贴这个问题。在数据类型上添加一个条件:如果isinstance(array[a],int)和array[a]==0
@shaikmoeed right,应该使用not bool实例,而不是InteExcellent point实例来描述在提供的其他解决方案(包括mines)中失败的测试用例Thierry提供了一个更完整的示例,并在我的答案中显示了缺陷,但我将把它留在这里,以完整性来突出缺陷。