使用Python刷题常用的模版代码集锦

  • 阅读前看
  • python3 中zip()函数
  • 集合的差集运算
  • 集合中去重操作
  • 默认字典collections.defaultdict()的使用
  • python遍历键值对
  • python遍历下标和值(字符串/数组)
  • python二维列表展开成一维列表
  • python删除指定元素
  • python字符串计数字符个数
  • python数组计数数字个数
  • python大小写转换(字符串)
  • python all函数
  • python 使用字典替代map
  • python实现一个整数数组的前缀和(刷题很常用)
  • python检查字符串是否只由数字组成
  • python实现一个字符串在另一个字符串出现次数的统计
  • python中字符和ASCII数字的相互转换
  • python 根据字典的键值进行排序的方法
  • python字典查询(简便方法)
  • python实现整形数字的位数切分(很常用)
  • python快速创建数组
  • python按步幅遍历数组
  • python.isalnum() 方法
  • python将字符串切分成单个的单词
  • python中进制转换(很常用)
  • python创建二维数组
  • python实现统计二维数组中的数
  • python判断括号的有效性(非常高频)
  • python构建无向图/树
  • python中dict记住插入位置
  • python实现排列组合(常用)
  • python实现统计二进制中1的个数
  • python实现字符串转换成数字
  • python实现列表升序排列
  • python实现单链表中间节点查找(快慢指针,非常高频)
  • python 中心扩散法判别回文字符串(高频)
  • python实现计算全排列的个数(常用)
  • python库函数bisect模块


阅读前看

以下常用的python代码模版是我在刷LeetCode时所作的笔记,若有误,还希望大家能够批评指正!

python3 中zip()函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

# paths是一个二维矩阵,transpose[1]表示paths[i][1],transpose[0]表示paths[i][0]
transpose = list(zip(*paths))

集合的差集运算

# 集合的差集运算 end和begin都是set
list(end - begin)

集合中去重操作

inter = set(nums1) & set(nums2)

默认字典collections.defaultdict()的使用

# collections.defaultdict(list)
import collections
 s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

# defaultdict
collections.defaultdict(list)  d = 
  for k, v in s:
      d[k].append(v)
  print(d.items())
# 输出 dict_items([('yellow', [1, 3]), ('blue', [2, 4]), ('red', [1])])

# collections.defaultdict(set)
import collections
  s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
  d = collections.defaultdict(set)
  for k, v in s:
      d[k].add(v)
  print(d.items())
# 输出:dict_items([('yellow', {1, 3}), ('blue', {2, 4}), ('red', {1})])

# collections.defaultdict(int)
import collections
  s = 'mississippi'
  d = collections.defaultdict(int)
  for k in s:
      d[k] += 1
  print(d.items())
# 输出:dict_items([('m', 1), ('i', 4), ('s', 4), ('p', 2)])

python遍历键值对

for key,value in hashmap.items():
    print(key,value)

python遍历下标和值(字符串/数组)

for idx,val in enumerate(s):
    print(idx,val)

python二维列表展开成一维列表

# 二维数组展开成一维数组
_temp = [i for item in index_map.values() for i in item]

python删除指定元素

# 1.remove: 删除单个元素,删除首个符合条件的元素,按值删除
  str=[1,2,3,4,5,2,6]
  str.remove(2)
# 2.pop: 删除单个或多个元素,按位删除(根据索引删除)
  str=[0,1,2,3,4,5,6]
  str.pop(1) #pop删除时会返回被删除的元素
# 3.del:它是根据索引(元素所在位置)来删除
  str=[1,2,3,4,5,2,6]
  del str[1]

python字符串计数字符个数

S.count(i)  # S是字符串 i是字符

python数组计数数字个数

m = collections.Counter()
for num in nums1:
      m[num] += 1
c = Counter(nums1).most_common(k)  # 记录字典中出现频率前k的键值对,返回元组格式

python大小写转换(字符串)

# 小写转大写
str = "hELLO world!"
str = (str.upper())
# 大写转小写
str = "hELLO world!"
str = (str.lower())
# 首字母转大写,其余小写
str = "hELLO world!"
str = (str.capitalize())
# 每个单词首字母转大写,其余小写
str = "hELLO world!"
str = (str.title())

python all函数

# 元素除了是 0、空、None、False 外都算 True
# 全True返回True,否则返回False
if all(a < 0 for a in nums1) and (b > 0 for b in nums2)

python 使用字典替代map

# 标准写法,去避免key不能为list的情况
hash_map = dict()

python实现一个整数数组的前缀和(刷题很常用)

s = [0 for i in range(len(A) + 1)]  # s代表前缀和,即s[i]表示sum(A[:i])
  for i in range(len(A)):
     s[i+1] = s[i] + A[i]

python检查字符串是否只由数字组成

c.isdigit()   # 是返回True,否则返回False

python实现一个字符串在另一个字符串出现次数的统计

count = collections.Counter(A.split()+B.split())
def check (s1,s2):  # s1,s2都是字符串
    return sum(map(lambda ch:s1.count(ch),s2))

python中字符和ASCII数字的相互转换

map(ord,t)  # 将字符串t中的字符映射为ASCII
chr(56)  # 将数字映射为相应的字符

python 根据字典的键值进行排序的方法

# 根据key排序
d = {'d1':2, 'd2':4, 'd4':1,'d3':3,}
for k in sorted(d):
  print(k,d[k])
# 根据value排序:__getitem__
for k in sorted(d,key=d.__getitem__):
  print(k,d[k])
# 反序:reverse=True
for k in sorted(d,key=d.__getitem__,reverse=True):
  print(k,d[k])
# 对dict_items进行排序
res = sorted(d.items(),key=lambda d:d[1],reverse=True)  # d[0]表示键,d[1]表示值
print(res)
# 区别
# items以列表形式返回字典键值对
# iteritems()以迭代器对象返回字典键值对

python字典查询(简便方法)

ab_map = dict()
for a in A:
    for b in B:
        ab_map[a + b] = ab_map.get(a + b, 0) + 1
# 哈希表,设预先置初始值为零
dicts = collections.defaultdict(int)

python实现整形数字的位数切分(很常用)

while num:
    rem = num % 10
    nums.append(rem)
    num //= 10
nums.reverse()

python快速创建数组

dp = [0] * (n + 1)

python按步幅遍历数组

for i in range(0,len(nums),2):
        print(i)

python.isalnum() 方法

# 检测字符串是否由字母和数字组成
s[L].isalnum()

python将字符串切分成单个的单词

print(list(strs))

python中进制转换(很常用)

# a是一个字符串"01010"
int(a,x) # 将x进制转十进制
bin(x) # 将x进制转二进制
oct(x) # 将二进制转八进制 
hex(x) # 将二进制转十六进制
# 八进制转十六进制可以借助十进制或者二进制为中间桥梁

python创建二维数组

n, m = len(A), len(B)
 dp = [[0] * (m + 1) for _ in range(n + 1)]

python实现统计二维数组中的数

c = sum(bisect.bisect_right(row,mid) for row in matrix) 
# bisect.bisect_right(row,mid)计算row中元素值<=mid的数量(matrix是一个二维数组)

python判断括号的有效性(非常高频)

def isValid(x):
    stack = []
    for i in range(len(x)):
        if x[i] == '(':
            stack.append('(')
        elif stack!=[] and stack[-1] == '(':
            stack.pop()
        else:
            return False
    return stack==[]

python构建无向图/树

"""
:type edges: List[List[int]]
"""
connect = collections.defaultdict(list)
for i, (a, b) in enumerate(edges):
    connect[a].append(b)
    connect[b].append(a)

python中dict记住插入位置

from collections import OrderedDict
d = {'banana': 3, 'apple': 4}
od1 = OrderedDict({'banana': 3, 'apple': 4})
od2 = OrderedDict({'apple': 4, 'banana': 3})
print(od1 == od2)  # False
print(od1 == d)  # True

python实现排列组合(常用)

import itertools
排列:itertools.permutations(iterable)  #无重复,全排列
组合:itertools.combinations(iterable, r)
组合(包含自身重复):itertools.combinations_with_replacement(iterable, r)

python实现统计二进制中1的个数

# 计算二进制中1的个数
def count1(n):
    ans = 0
    while n != 0:
        n = n & (n - 1)
        ans += 1
    return ans
or
bins = [str(bin(i))[2:].count('1') for i in range(60)]

python实现字符串转换成数字

def changeToNums(self,s):
    nums = ""
    dict = {}
    count = 0
    for c in s:
        if(c in dict):
            continue
        else:
            dict[c] = str(count)
            count += 1
    for c in s:
        nums += dict[c]
    return nums

python实现列表升序排列

nums = sorted(nums, reverse = True)

python实现单链表中间节点查找(快慢指针,非常高频)

def findmid(head, tail):
    slow = head
    fast = head
    while fast != tail and fast.next!= tail :
        slow = slow.next
        fast = fast.next.next
    return slow

python 中心扩散法判别回文字符串(高频)

# s是字符串
def speard(l, r):
    count = 0
    while l >= 0 and r <= len(s)-1 and s[l] == s[r]:
        l -= 1
        r += 1
        count += 1
    return count

python实现计算全排列的个数(常用)

def mul(n):
    if n<=1:
        return 1
    else:
        return n*mul(n-1)

python库函数bisect模块

import bisect
 
L = [1,3,3,6,8,12,15]
x = 3
 
x_insert_point = bisect.bisect_left(L,x)  #在L中查找x,x存在时返回x左侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回左侧位置1
print x_insert_point  # 1
 
x_insert_point = bisect.bisect_right(L,x)  #在L中查找x,x存在时返回x右侧的位置,x不存在返回应该插入的位置..这是3存在于列表中,返回右侧位置3
 
print x_insert_point  # 3
 
x_insort_left = bisect.insort_left(L,x)  #将x插入到列表L中,x存在时插入在左侧
print L  # [1, 3, 3, 3, 6, 8, 12, 15]
 
x_insort_rigth = bisect.insort_right(L,x) #将x插入到列表L中,x存在时插入在右侧    
 
print L  # [1, 3, 3, 3, 3, 6, 8, 12, 15]