面向力扣的Python速成经验(随时更新ing)

博主很久以前有C++的经验,但感觉以后工作接触不到C++,遂决定摆烂放弃C++直接用Python刷Leetcode^_^


数据结构

基础数据类型

Python中,均为左闭右开结构,刷力扣时如发现output与answer差一位,可以尝试检查index是否考虑左闭右开。

a = 1 # 整型
b = 2.2 # 浮点型
c = "String" # 字符串类型
d = 'char' # 字符串类型
e = False # 布尔值
f = True # 布尔值

字符串:不可变数据类型

a = "Hello World"
a = a[x:y:z] # 切片操作, index[x,y)截取出来,步长为z
a = a.replace("World", "C++") # 替换操作
arr = a.split(" ") # 根据" "来切分, arr为一个列表
# ["Hello", "World"]
string = "-".join(arr) # 拼接操作, 用"-"来拼接每一个元素
# "Hello-World"

四种复合数据类型

a = [1, 3, 5] # 列表
c = (1, 3, 5) # 元组
b = {1, 3, 5} # 集合
d = {'n': 1, 'b': 2} # 字典

列表:列表是有序的,且中的元素可以为不同类型,index与C一样从0开始。

b = 12
a = [1, False, "Happy", b, [1, 2, 3]]
c = b[4][0]

if 1 in a:
    print("找到1在a中")
"""
创建列表
"""
array_2d = [[0 for _ in range(cols)] for _ in range(rows)] # 二维列表

"""
插入列表元素
"""
a.append("abc") # 末尾添加元素
a.insert(2,'t') # 在index[2]插入元素

"""
删除列表元素
"""
a.pop(2) # 删除index[2]的元素
a.remove(b)
a.clear
del a

"""
复制列表
"""
list2 = list1.copy() # 复制列表
list2 = list1 # 相当于C中的双指针指向同一地址, 元素更改是同步的

"""
列表排序
"""
a.sort() # 无return
b = sorted(a) # 有return

元组:与列表不同,元组是只读的、不可修改的,index同样从0开始。

a = [1, 2, "qwer", 4, 5]
"""
遍历元组
"""
for i in a:
    print(i)

for i in range(len(a)):
    print(a[i])

集合:无序性、不重复性

ls = set() # 空集合
str = {1, 3, 3, 4}
print(str) # {1, 3, 4} 自动去除相同元素, 内部在逻辑上是无序的
"""
集合插入元素
"""
ls.add(4) # 插入单个元素
ls.update((6, 7), {8}) # 混合插入元组和集合

字典:Key和Value

m = {} # 空字典
map = {"name": "哞哞牧场", "age": 18}
map.keys() # ['name', 'age']
map.values() # ['哞哞牧场', 18]
map.items() # [('name', '哞哞牧场'), ('age', 20)]

"""
修改字典
"""
map["age"] = 100

"""
遍历字典
"""
for k, v in map.items():
    print(k)
    print(v)

"""
删除字典
"""
del map["age"]
map.clear
del map
"""
子集判断
"""
if dict_A <= dict_B:
    print("A是B的子集")

特殊数据类型

队列:collections.deque() 是 Python 标准库中的双端队列(Double-Ended Queue),支持高效的从两端添加和删除元素

from collections import deque

# 创建一个双端队列
dq = deque()

# 添加元素
dq.append(1) # 在右侧添加元素
dq.append(2)
dq.appendleft(0) # 在左侧添加元素

# 访问元素
print(dq[0])   # 访问第一个元素
print(dq[-1])  # 访问最后一个元素

# 移除元素
dq.pop():移除并返回队列右侧的元素。
dq.popleft():移除并返回队列左侧的元素。
print(dq.popleft())  # 输出 0
print(dq.pop())      # 输出 2

简单语句

print语句

num = 22

print("Hello World")
print(f"hello {num}") # f:格式化输出

input语句

a = input()
b = input("请输入: ")
c = int(input("请输入: ")) # 强制类型转换

random语句

import random
a = random.randint(1, 100)
b = random.uniform(1, 100)
c = random.random()
print(a, b, c)

运算法则

a = b + c
a = b - c
a = b / c
a = b // c # 整除运算
a = b % c # 求余数
a = b * c
a = b ** c # b的c次方

str1 = "O"
str2 = "P"
str = str1 + str2 # OP
str = str1 + str2 * 3 # OPPP

条件和循环

条件if语句

a = 1
b = 2
if a < b:
    print("小孩")
elif a > b:
    print("大孩")
else:
    print("中孩")

while和for循环语句

a = 0
while a < 10:
    a++
    if a == 5:
        continue # break
    print(a)

for i in range(10): # range()函数用于生成一个迭代器; range(a, b)可以约定范围
    print(i)

str = "ABCDEF"
for i in str:
    print(i) # ABCDEF 


函数def function

def my_function(参数a, 参数b):
    xxx
    xxx

def func():
    return 1, 2
a = func() # a为元组(1, 2)
a, b = func() # 拆包操作

"""
不定长参数: 表示参数量不确定,可能有无穷多个, 
*args:包裹位置参数, 只需要写一个值即可
**kwargs: 包裹关键字参数, 需要写关键字及值 ns = 1
"""
def fun(n, age=18, *args, **kwargs):
    xxx
    xxx

fun(1, 196, 2, 3, 4, ns=10, nt=100)
# n = 1; age = 18; arge = (196, 2, 3, 4); kwargs = {"ns": 10, "nt": 100}

一些常见算法用函数(LeetCode Hot 100)

defaultdict()函数:

  • 创建一个默认值为空列表(list), 空集合(set), 空值(int) 的字典
  • 访问不存在的键时,会自动创建该键并用指定的默认工厂函数初始化值
d = {}
d['key'].append(1)  # 报错 KeyError,因为'key'不存在

from collections import defaultdict
d = defaultdict(list)
d['key'].append(1)  # 自动创建 'key': [1]

enumerate()函数:

  • 用于在遍历一个可迭代对象(如列表、元组、字符串等)时,同时获取元素的索引和值
  • 它返回一个枚举对象 ,其中每个元素是一个包含索引和对应值的元组
fruits = ['apple', 'banana', 'cherry']

for index, value in enumerate(fruits):
    print(f"Index: {index}, Value: {value}")

ord()函数:

  • 用来返回单个字符的ascii值(0-255)或者unicode数值
>>> ord('d')
100
>>> ord('5')
53

Counter()函数:

  • 用于统计可迭代对象中元素的出现次数,​​返回的是一个类似字典(dict-like)的对象​
s = "abacab"
cnt_s = Counter(s)
print(cnt_s)  # 输出: Counter({'a': 3, 'b': 2, 'c': 1})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哞哞牧场

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值