Phthon3 学习记录-0707
零碎的知识点1
if not nums:return 0
在 Python 中,if not nums:
这行代码用于检查变量 nums
是否为 “空值” 或 “假值”。以下是详细解释:
Python 中的真值和假值:
- 在 Python 中,许多对象在布尔上下文中可以被解释为
True
或False
。一些常见的假值包括:False
本身(布尔类型)。None
(表示空值)。- 数值类型中的
0
(包括整数0
、浮点数0.0
等)。 - 空序列,如空字符串
''
、空列表[]
、空元组()
、空集合set()
以及空字典{}
。
- 除了上述假值之外的其他对象,在布尔上下文中通常被解释为
True
。
- 在 Python 中,许多对象在布尔上下文中可以被解释为
if not nums:
的含义:not
是 Python 中的逻辑非运算符,它会对操作数的布尔值取反。例如,如果操作数在布尔上下文中为True
,not
操作后结果为False
;如果操作数为False
,not
操作后结果为True
。- 在
if not nums:
中,首先会判断nums
在布尔上下文中的值。如果nums
是一个空列表(因为题目中nums
是列表),它在布尔上下文中的值为False
,那么not nums
的值就为True
,if
语句块中的代码return 0
就会被执行。这意味着如果传入的列表nums
为空,函数直接返回0
,因为空列表中没有元素,去重后的长度自然为0
。 - 如果
nums
不是空列表,它在布尔上下文中的值为True
,not nums
的值就为False
,if
语句块中的代码不会执行,程序会继续执行if
语句块之后的代码,即执行后续的去重逻辑。
例如:
nums1 =[]if not nums1:print('这是一个空列表')nums2 = [1, 2, 3]
if not nums2:print('这应该不会被打印')
在上述代码中,nums1
是空列表,if not nums1:
条件成立,会打印 这是一个空列表
;而 nums2
不是空列表,if not nums2:
条件不成立,不会打印 这应该不会被打印
。
零碎的知识点2
pop() 函数的详细介绍
list.pop([index])
index
是可选参数。如果不提供index
,pop()
会移除并返回列表的最后一个元素。如果提供了index
,则移除并返回指定位置的元素。
示例
1.不指定索引
my_list = [1, 2, 3, 4, 5]
popped_item = my_list.pop()
print(popped_item)
print(my_list)
在上述代码中:
- 首先定义了一个列表
my_list
。 - 调用
my_list.pop()
时没有指定索引,它会移除并返回列表的最后一个元素5
,并将其赋值给popped_item
。 - 然后打印
popped_item
,输出5
。 - 再打印
my_list
,此时列表变为[1, 2, 3, 4]
,因为最后一个元素已被移除。
2.指定索引
my_list = [1, 2, 3, 4, 5]
popped_item = my_list.pop(2)
print(popped_item)
print(my_list)
在这段代码里: 同样定义了 my_list 列表。 调用 my_list.pop(2),这里指定索引为 2,它会移除并返回索引为 2 的元素,即 3,并赋值给 popped_item。 打印 popped_item,输出 3。 打印 my_list,此时列表变为 [1, 2, 4, 5],索引为 2 的元素已被移除。
stack.append(i)
在 Python 中,stack.append(i) 是列表(这里用 stack 表示这个列表,模拟栈数据结构)的一个方法调用。它的作用是将元素 i 添加到列表 stack 的末尾。 结合你之前判断括号匹配的代码来看:
class Solution:def isValid(self, s: str) -> bool:dic = {')':'(',']':'[','}':'{'}stack = []for i in s:if stack and i in dic:if stack[-1] == dic[i]:stack.pop()else:return Falseelse:stack.append(i)return not stack
在这个代码的循环中,stack.append(i) 主要用于处理左括号。当遍历字符串 s 中的字符 i 时,如果 i 不是右括号(或者栈为空),就将 i 添加到 stack 列表的末尾。由于这里把 stack 当作栈来使用,append(i) 操作就相当于将左括号压入栈中。这样,后续遇到右括号时,可以从栈顶取出相应的左括号进行匹配检查。 例如,假设字符串 s = "([{)]",当遍历到第一个字符 ( 时,因为它是左括号,所以通过 stack.append(i) 将 ( 压入栈 stack,此时 stack = ['(']。当遍历到 [ 时,同样将 [ 压入栈,stack = ['(', '[']。后续遇到右括号时,就会从栈顶取出元素进行匹配判断。