经常看到比如官方给出一个while a:类似这样的语句。如果只学过Python的人看了会觉得困惑。
这句话的非简写形式可能是这样的。首先定义一个a,比如a=1。 然后意思是while a is not None:
我第一次见到这个是在链表中,假设a是一个class<ListNode>,那么while a:后可以对链表进行操作,操作中可以移动a的位置,直到a确实可以达到None。参考题目:力扣203:
class ListNode:
def __init__(self, x):
self.val = x
self.next = None # 初始化链表节点,包含值val和指向下一个节点的指针next
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
"""
移除链表中所有值等于val的节点
:param head: 链表的头节点
:param val: 需要移除的值
:return: 移除指定值后的链表头节点
"""
# 创建一个哑节点(dummy node),其next指向链表的头节点,这样可以简化边界处理
dummy = ListNode(0)
dummy.next = head
# prev用于指向当前节点的前一个节点,curr用于指向当前处理的节点
prev, curr = dummy, head
# 遍历链表
while curr:
# 如果当前节点的值等于val
if curr.val == val:
# prev的next指针绕过curr,直接指向curr的下一个节点,从而移除curr
prev.next = curr.next
else:
# 如果当前节点不需要移除,prev向前移动一位
prev = curr
# 无论是否移除当前节点,curr都向前移动到下一个节点
curr = curr.next
# 返回新链表的头节点,即哑节点的下一个节点
return dummy.next