Python的这些特殊知识点你掌握了吗

Python中常用的API介绍

1. sort()

list.sort( key=None, reverse=False)
参数

  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序(key的参数是一个函数名
  • reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)

示例:

# 获取列表的第二个元素
def takeSecond(elem):
    return elem[1]


# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# random = [[2, 2], [3, 4], [4, 1], [1, 3]]


# 指定第二个元素排序
# random.sort(key=takeSecond)
random.sort(key=lambda x: x[1])

# 输出类别
print('排序列表:', random)
# 输出 排序列表: [(4, 1), (2, 2), (1, 3), (3, 4)]

做OJ时常用的语法

1. 初始化数组

一维数组

num = [0] * 5  # 创建一个长度为5,值为0的列表
# 或者 num = [0 for i in range(5)]
print(num)     # 输出[0, 0, 0, 0 ,0]

两维数组
初始化,全部赋值为0

# 创建两维数组
dp = [[0 for i in range(2)] for j in range(4)]
print(dp)  # [[0, 0], [0, 0], [0, 0], [0, 0]]

2. python3中map用法

map(function, iterable, ...)
第一个参数 function 以函数参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表

map() 会根据提供的函数对指定序列做映射
python2 map返回列表
python3 map返回迭代器,故要结合list使用

# python3
def f(x, y):
    return x * y


print(list(map(f, [1, 2, 3], [1, 2, 3])))  # f有两个参数就要有两个列表
# 输出 [1, 4, 9]

mlist = list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))  # 使用lambda匿名函数
print(mlist)

mlist = list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))  #  对相同位置的列表数据进行相加
print(mlist)
# 输出 [3, 7, 11, 15, 19]

3. 读取输入样例的方法

比较好用的模版

# 输入样例:
# 4 3
# 0 0 2 1
# 2 0 1 1

R = lambda: map(int, input().split())
# R()读入一行数,R() = map(int, input().split()) # 迭代器
n, m = R() # n = 4, m = 3
list_a, list_b = list(R()), list(R())  # 读入两行数
# list_a = [0, 0, 2, 1]

下面两种方式赋值都是可以的

a, b = [1, 3]  # a=1, b=3可以这样赋值
n, m = iter(set([2, 4])) # 迭代器形式也可以分别赋值

读取两个数的方法
法一:

# 读取 13 27
n, m = list(map(int, input().split()))  # int是函数int()的函数名,split返回一个列表
# 也可以n, m = map(int, input().split()) 但不推荐
print(n, m)

法二:

# 读取 13 27
n, m = [int(i) for i in input().split()]  # 这样也可以读取n和m
print(n, m)

读取一行数组的方法

# 读取 1 2 3 4
array = [int(i) for i in input().split()]
print(array) # 1 2 3 4

读取n行数组的方法

# 读取 
# 1 2 3
# 4 5 6
# 7 8 9 
goods = []
for i in range(3):
    goods.append([int(i) for i in input().split()])

print(goods)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

4. 列表表达式

列表推导式是由包含一个表达式的中括号组成,表达式后面跟随一个 for 子句,之后可以有零或多个 for 或 if 子句。最终结果是一个列表,由表达式依据其后面的 for 和 if 子句上下文计算而来的结果构成。

例如,如下的列表推导式结合两个列表的元素,且元素之间不相等:

# 列表表达式
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
# 普通for循环形成列表
>>> combs = []
>>> for x in [1,2,3]:
...     for y in [3,1,4]:
...         if x != y:
...             combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

5. 数据结构

官方文档传送门
在这里插入图片描述

示例

OJ代码示例

在这里插入图片描述

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
@Author    :   Wilson79
@Filename  :   编程导论D.py  
@Date      :   2020/1/25 下午06:03 
"""
R = lambda: map(int, input().split())
n, k = R()
nums, queries = list(R()), list(R())
sums = [0] * (n + 1)

for i in range(n):
    sums[i + 1] = sums[i] + nums[i]

res = ''
for i in range(n):
    res += str(sums[queries[i]]) + ' '

print(res)

LeetCode代码示例

在这里插入图片描述

class Solution:
    # 起点i,长度n,求和公式(2*i+n-1)n/2 = N
    # 解出i = (N-n(n-1)/2)/n
    # 我们从1开始遍历n,如果i < 1即N < n(n+1)/2退出循环
    def consecutiveNumbersSum(self, N: int) -> int:
        res = 0
        for n in range(1, N + 10):
            if (n * (n + 1) > 2 * N):
                break
            if (N - n * (n - 1) // 2) % n == 0:
                res += 1
        
        return res

%%%%%%%%%

if __name__ == '__main__'含义

  • if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行

在这里插入图片描述
car.py

#!/usr/bin/env python
# -*- encoding: utf-8 -*-

"""一个可用于表示汽车的类,该模块被my_car.py调用"""
# 如果直接运行这个模块,输出__main__
# 如果这个模块被调用,则在调用程序中会输出car(该模块名)
print(__name__)

# 直接运行该模块会输出Hello,被别的文件调用时不会输出Hello
if __name__ == '__main__':
    print("Hello")  
    
print("World!")  # 被别的文件调用时会先输出World


class Car():
	--snip--

参考博客—如何简单地理解Python中的if name == ‘main


Python可迭代对象和迭代器的区别

一文看懂Python可迭代对象和迭代器的区别

函数名可以赋给变量

简化有些赋值的函数名,当然这会降低可读性

s = sorted
print(s([2,3,1])) # 输出 [1, 2, 3]

print换行符和rstrip()函数换行符

# rstrip()默认可以去掉右端(空格或换行符\n),最后有空行是因为print语句会加上一个换行符
str1 = "Here:\ny ou\n \n\n\n\n"
print(str1.rstrip())

输出

Here:
y ou

sys.path.append()

在这里插入图片描述
sys.path返回一个搜索列表

当我们需要添加自己的搜索目录时,可以通过列表的append()方法,特别是模块和自己写的程序不在同一个目录的情况

import sys
sys.path.append('/Users/macos/Documents/Wilson79/Python/Program')

这样就可以搜索/Users/macos/Documents/Wilson79/Python/Program目录下的模块了
在这里插入图片描述
注:可以用Workflow快速获得某个目录的完整地址
在这里插入图片描述

def greeting(name: str) -> str:

函数接受并返回一个字符串,注释像下面这样

def greeting(name: str) -> str:
    return 'Hello ' + name

在函数greeting 中,参数name 预期是 str 类型,并且返回 str 类型

官方文档

发布了182 篇原创文章 · 获赞 71 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_43827595/article/details/104078081