目录

蓝桥杯算法之基础知识4

蓝桥杯算法之基础知识(4)


Ⅰ.sorted排序

》列表排序—segs=[[1, 4], [3, 6], [5, 7]]

(1)普通的简单方法:

s = sorted(segs)—(默认情况升序,值为False)

降序—s = sorted(segs, reverse=True)

默认排序规则:当不指定 key 参数时,sorted() 会使用默认的排序规则。对于列表中的子列表,Python 会按字典序进行比较:

  • 先比较每个子列表的第一个元素,
  • 如果第一个元素相等,再比较第二个元素,以此类推。

(2)带有lambda表达式的key方法

s=sortef(segs,key=lambda x:x[0])

https://i-blog.csdnimg.cn/direct/62afc2c7f5a84d1bb8e9d57a660fdfdb.png

特别注意:字符也能进行排序

https://i-blog.csdnimg.cn/direct/ed00e4b0582147a88f28be4024aa28c1.png

Ⅱ.排序具体的方法

https://i-blog.csdnimg.cn/direct/a5a4de8b94b34e4cbf3cf9842a1e37bc.png

(1)sort的神方法(注意是sort)

def var(x):    
	print(f"处理: {x}")    
  return x 
N = [3, 1, 2] 
N.sort(key=var) # 输出: # 处理: 3 # 处理: 1 # 处理: 2 
print(N)  # [1, 2, 3]

为啥 var 不用带参数:

  • key=var 的写法

    • sort() 会自动把列表中的每个元素传给 var 函数。
    • 你写 key=var(不加括号),是把函数本身传给 sort(),而不是调用它。
    • sort() 内部会循环调用 var(x),x 是 N 中的每个元素。
  • 不需要显式参数:

    • sort() 知道要对 N 的每个元素应用 var,所以你只定义 var(x) 的逻辑,sort() 负责传参。
  • **错误写法:**N.sort(key=var())

    • 这会立刻调用 var(),但 var 需要一个参数,报错 TypeError: var() missing 1 required positional argument: ‘x’。
  • **正确写法:**N.sort(key=var)

    • 传函数名,sort() 自动处理。

(2)sorted的神方法(注意这里是sorted)

def var(x):
    print(f"处理: {x}")
    return x

N = [3, 1, 2]
M = sorted(N, key=var)
# 输出:
# 处理: 3
# 处理: 1
# 处理: 2
print(M)  # [1, 2, 3]
print(N)  # [3, 1, 2](原列表不变)

》明白了其实key里面就是对数组里的x进行统一的变化,比如x%10,x//10,甚至有a=sorted(a,key=lambda x:(var(x),x))

  • sorted(iterable, key=None, reverse=False):

    • iterable:要排序的对象(列表、元组等)。
    • key:一个函数,定义排序依据
    • reverse:是否降序。
    • 返回:新的排序后的列表。
  • lambda:

    • 匿名函数,写法是 lambda 参数: 表达式
    • 在 sorted() 中,lambda 定义怎么比较每个元素。
常见场景
  1. 用 lambda 按绝对值排序:

    a = [-3, 2, -1] b = sorted(a, key=lambda x: abs(x)) print(b) # [-1, 2, -3]

  2. 降序:

    a = [3, 1, 2] b = sorted(a, key=lambda x: x, reverse=True) print(b) # [3, 2, 1]

1. 单关键字排序
  • 按最后一位数字排序:

    a = [13, 25, 31] b = sorted(a, key=lambda x: x % 10) print(b) # [31, 13, 25](1, 3, 5)

  • 按字符串长度:

    a = ['cat', 'elephant', 'dog'] b = sorted(a, key=lambda x: len(x)) print(b) # ['cat', 'dog', 'elephant']

2. 多关键字排序
  • 用元组:lambda 返回元组,按元素顺序比较。

  • 例子:按 (主关键字, 次关键字) 排序:

    pairs = [(1, 3), (2, 1), (1, 2)] b = sorted(pairs, key=lambda x: (x[0], x[1])) print(b) # [(1, 2), (1, 3), (2, 1)]

3.按倒序字符串排序
a = ['cat', 'dog', 'bat']
b = sorted(a, key=lambda x: x[::-1])
print(b)  # ['dog', 'bat', 'cat']  

#反转后的字符串是:'tac'、'god'、'tab'然后进行排序
4.按字典某字段排序
data = [{'name': 'cat', 'age': 3}, {'name': 'dog', 'age': 2}] 

b = sorted(data, key=lambda x: x['age']) 

print(b)  # [{'name': 'dog', 'age': 2}, {'name': 'cat', 'age': 3}]
5.单条件
a = [ -2,1,3, -4] b = sorted(a, key=lambda x: x if x > 0 else -x) 
print(b)  # [1,-2, 3, -4]
#把所有数字映射成“正数形式”,但保留正负信息,最终排序按照正数排但显示最初的值
6.多条件组合
a = ['cat', 'dog', 'elephant'] 
b = sorted(a, key=lambda x: (len(x), x))  # 先长度,再字典序 
print(b)  # ['cat', 'dog', 'elephant']
7.处理 None
a = [1, None, 3] 
b = sorted(a, key=lambda x: (x is None, x)) 
print(b)  # [None, 1, 3]

Ⅲ.list和str创建以及tuple元组

》tuple元组化:

https://i-blog.csdnimg.cn/direct/19672a166f134f4fbcd530103ebbe322.png

》list和str创建:

https://i-blog.csdnimg.cn/direct/efa9f6037f974785b0ac3f1d0dd21ebb.png

》默认情况下,输入的就是字符串类型

https://i-blog.csdnimg.cn/direct/47f59e2673064c37992776d3a311515f.png

Ⅳ.字符串的拼接和for的倒序遍历

https://i-blog.csdnimg.cn/direct/6dcb192e9c344f7aa1d79336f01e4bdc.png

Ⅴ.列表的拼接—使得默认下标从1开始引入元素

join的使用:列表list转为字符串

https://i-blog.csdnimg.cn/direct/d9f44b4f4d4e4a32aee77433463bab5a.png

https://i-blog.csdnimg.cn/direct/f1721bc18e314e9e8b6cf8d1025b9f9f.png

或者另一个方法

https://i-blog.csdnimg.cn/direct/89f918b60c334c468a5ac526fd9b85af.png

https://i-blog.csdnimg.cn/direct/75c7ac82ef5f4a83affd505e59545362.png

Ⅵ.split()的使用和join通常配合使用

https://i-blog.csdnimg.cn/direct/f588876f920248deb2a4201eb88e8270.png

https://i-blog.csdnimg.cn/direct/23bc6adf865c4100970518c5582331e4.png

Ⅶ.list的负数访问

https://i-blog.csdnimg.cn/direct/7c862c5179f34035a54be6f2ec4fc45a.png

Ⅷ.ord和chr函数(非常有用)

1. ord() 函数

ord() 函数用于获取一个字符的 Unicode 码点(整数表示)。

语法
ord(c)

参数
c:一个长度为 1 的字符串(即单个字符)。
返回值
返回字符 c 的 Unicode 码点(整数)。

print(ord('A'))  # 输出:65
print(ord('a'))  # 输出:97
print(ord('中'))  # 输出:20013

2. chr() 函数

chr() 函数用于将一个 Unicode 码点(整数)转换为对应的字符。

语法
chr(i)

参数
i:一个整数,表示 Unicode 码点(范围:0 到 1114111)。
返回值
返回 Unicode 码点 i 对应的字符。

print(chr(65))  # 输出:A
print(chr(97))  # 输出:a
print(chr(20013))  # 输出:中

Ⅸ.一键实现 十进制转2、8、 16 进制(必须要会)

https://i-blog.csdnimg.cn/direct/14336758a591454b9ae8e8b68b85e472.png

Ⅹ.一键实现2、 8、 16进制转10进制(同理这个也必须要会)

https://i-blog.csdnimg.cn/direct/f8c4cb39a55e48498b21432fdd92acec.png