Notas de puntos de conocimiento de Python


Registre algunos puntos de conocimiento encontrados en Python para facilitar consultas futuras.

1. lambda

Lambda es esencialmente una función escrita en una línea. El lado izquierdo de los dos puntos es el valor de entrada de la función y el lado derecho es el valor de retorno. Puede haber múltiples entradas y retornos.

lambda x:x+1

lambda x, y:x+y

2. mapa ()

map () mapeará la secuencia especificada de acuerdo con la función proporcionada.

La primera función de parámetro llama a la función de función con cada elemento de la secuencia de parámetros, lo que equivale a realizar una operación de función en cada elemento del objeto iterable que se ingresa posteriormente.
Devuelve un iterador de mapa, que se puede convertir en lista y establecer objetos para su visualización usando list () o set ().
mapa (función, iterable,…)

list(map(lambda x:x+1, [1, 2, 3]))

list(map(lambda x, y:x+y, [1, 2, 3], [4, 5, 6]))

3. Python usa el mapa para operar en paralelo

Un tutorial sobre cómo utilizar mapas de subprocesos múltiples.
https://www.cnblogs.com/wangxusummer/p/4835929.html
https://www.cnblogs.com/sthu/p/9355759.html

4. Use * para desempacar y use zip () para empacar

Cuando la entrada es una lista de longitud indeterminada, y la entrada de la función requiere que todas las variables se ingresen por separado, use * para expandir cada elemento en la lista por separado como una entrada de variable.
Algunas funciones de la biblioteca numpy a veces deben ingresarse de esta manera.

La función zip () se usa para tomar un objeto iterable como parámetro, empaquetar los elementos correspondientes del objeto en tuplas y luego devolver una lista de estas tuplas.
Si el número de elementos en cada iterador es inconsistente, la longitud de la lista devuelta es la misma que la del objeto más corto.

# 使用python一行完成矩阵旋转
# 转自https://leetcode-cn.com/problems/rotate-image/comments/712701

nums = [[1,2,3],[4,5,6],[7,8,9]]
# 使用*反序解包
print(*nums[::-1])
# [7, 8, 9] [4, 5, 6] [1, 2, 3]

# 使用zip将元素挨个打包
nums[:] = zip(*nums[::-1])
print(nums)
# [(7, 4, 1), (8, 5, 2), (9, 6, 3)]

5. función reducir ()

Se acumularán los elementos de la secuencia de parámetros.

La función realiza las siguientes operaciones en todos los datos en un conjunto de datos (lista enlazada, tupla, etc.): use la función de función pasada para reducir (con dos parámetros) para operar en el primer y segundo elementos del conjunto, y obtener El resultado se calcula con el tercer dato usando la función función, y finalmente se obtiene un resultado.
Ejemplo: sumar cada número en la lista

from functools import reduce

def get_sum(nums):
    return reduce(lambda x, y: x + y, nums)		
	
print(get_sum([1,3,5,6]))

6. Operadores bit a bit

& Operador AND
bit a bit | Operador OR bit a
bit ^ Operador OR exclusivo bit a bit: cuando los dos bits binarios correspondientes son diferentes, el resultado es 1
~ Operador de negación bit a bit
<< Operador de desplazamiento a la izquierda: del operando Todos los bits binarios se desplazan a la izquierda en varios bits. El número a la derecha de << especifica el número de bits a mover. Los bits altos se descartan y los bits bajos se rellenan con 0.
Igual que: >> Operador de desplazamiento a la derecha: desplaza todos los bits binarios del operando a la izquierda de ">>" en unos pocos dígitos, y el número a la derecha de >> especifica el número de dígitos a mover

Ejemplo: Dada una matriz de enteros no vacía, a excepción de un elemento determinado que aparece solo una vez, todos los demás elementos aparecen dos veces. Encuentra el elemento que aparece solo una vez. Utilice la operación OR exclusiva para obtener el resultado.

def singleNumber(nums):
	return reduce(lambda x, y: x ^ y, nums)

7. Use [:] para cambiar el valor de la lista sin que la función regrese

def merge(a, b):
		a = a + b
		
a = [1, 2, 3]
b = [4, 5, 6]

merge(a, b)
print(a)

[1, 2, 3]

def merge(a, b):
		a[:] = a + b
		
a = [1, 2, 3]
b = [4, 5, 6]

merge(a, b)
print(a)

[1, 2, 3, 4, 5, 6]

8. Consultar el índice del primer elemento especificado en la lista.

# 查询第一个指定元素的位置
index = list_1.index(element)

9. Expresiones regulares

Identifique el número al principio de la cadena, el código y la descripción se transfieren desde leetcode

def myAtoi(self, s):
        return int(*re.findall('^[\+\-]?\d+', s.lstrip()))

作者:QQqun902025048
链接:https://leetcode-cn.com/problems/string-to-integer-atoi/solution/python-1xing-zheng-ze-biao-da-shi-by-knifezhu/
来源:力扣(LeetCode)

^:匹配字符串开头
[\+\-]:代表一个+字符或-字符
?:前面一个字符可有可无
\d:一个数字
+:前面一个字符的一个或多个
\D:一个非数字字符
*:前面一个字符的0个或多个

10. función enumerate ()

La función enumerate () se utiliza para combinar un objeto de datos transitable (como una lista, tupla o cadena) en una secuencia de índice y enumerar datos y subíndices de datos al mismo tiempo.

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
print(list(enumerate(seasons)))

[(0, 'Primavera'), (1, 'Verano'), (2, 'Otoño'), (3, 'Invierno')]

11. Montón

# 导入库
from heapq import * 

# 用一个列表充当堆
heap = [] 

# 加入元素
for i in range(10):
	heappush(heap, i)
	
# 取出最小元素
min_val = heappop(heap)

# 将普通列表整理为一个最小堆
list1 = [4, 3, 1, 2, 7]
heapify(list1)
# list1 = [1, 2, 4, 3, 7]

# 将所有数字取负输入,再取负输出,即可将其作为最大堆使用。
list2 = list(map(lambda x:-x,[4, 3, 1, 2, 7]))
heapify(list2)
# list2 = [-7, -4, -1, -2, -3]

# 也可以按照元素的顺序进行对第一个元素的排序
list3 = [(4,1), (3,9), (1,4), (2,3), (7,2)]
heapify(list3)
print(list3)
# list3 = [(1, 4), (2, 3), (4, 1), (3, 9), (7, 2)]

12. Utilice sorted () y reversed () para ordenar o invertir la lista localmente

a = [4, 3, 1, 2, 0]

a[:4] = reversed(a[:4]) 
print(a)
# [2, 1, 3, 4, 0]

a[:4] = sorted(a[:4]) 
print(a)
# [1, 2, 3, 4, 0]

13. filtro ()

La función filter () se utiliza para filtrar la secuencia, filtrar los elementos que no cumplen las condiciones y devolver una nueva lista de elementos que cumplen las condiciones.

Debe recibir dos parámetros, el primero es una función y el segundo es una secuencia. Cada elemento de la secuencia se pasa como un parámetro a la función para su juicio, y luego devuelve Verdadero o Falso, y finalmente el elemento que devuelve Verdadero es colocado en la nueva lista.

def is_odd(n):
    return n % 2 == 1
 
newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(newlist)

[1, 3, 5, 7, 9]

14. Permutación y combinación

itertools.permutations () enumera las posibilidades de permutación.
itertools.combinations () enumera las posibilidades de combinación.

import itertools

list1 = [1, 2, 3]

# 包含3个值的情况下所有的排列可能性
list2 = list(itertools.permutations(list1,3))
print(list2)
# [(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

# # 包含3个值的情况下所有的组合可能性
list3 = list(itertools.combinations(list1,2))
print(list3)
# [(1, 2), (1, 3), (2, 3)]

15. Factorial factorial ()

import math
num = math.factorial(6)
print(num)

16. repr () maneja caracteres de escape

Cuando necesita ingresar la ruta desde cmd o archivo, por ejemplo, la ruta "E: \ V1R2 \ product \ fpgadrive.c", y luego necesita cortar el último nombre de archivo, puede encontrar que / f sea juzgado como un solo carácter, que puede no ser correcto Identificar la posición del último /.
Para la cadena en el código, simplemente puede agregar r al principio del código para resolverlo, pero para la cadena de lectura, solo puede usar el nombre de la variable para operarla.
En este punto, puede usar repr (entrada) para obtener la entrada de cadena original y luego buscar // para obtener el nombre del archivo.
Nota: repr (entrada) hará que el principio y el último carácter de la cadena se conviertan en ', que puede eliminarse con [1: -1].

a = repr(input())
# 输入E:\V1R2\product\fpgadrive.c
print(a)
# 'E:\\V1R2\\product\\fpgadrive.c'
a = a[1:-1]
print(a)
# E:\\V1R2\\product\\fpgadrive.c
for i in range(len(a)-1,-1,-1):
	if a[i] == "\\":
		print(a[i+1:])
		# fpgadrive.c
		break

17. Juicio de aborto de entrada CMD para líneas de entrada desconocidas

Basado en la captura de excepciones

while True:
    try:
        deal_with(input())
    except:
        break


Nota basada en sys : este método provocará un salto de línea de \ n al final de la línea de lectura, lo que puede resultar en errores de salto de línea adicionales en la salida de algunas preguntas.

import sys
while True:
    line = sys.stdin.readline()
    if not line:
        break
    deal_with(line)

18. Copia profunda de matriz de orden superior

En el caso de no usar Numpy, puede usar [:] para hacer una copia profunda de la lista de Python original, pero si la lista es una matriz de segundo orden o superior, el efecto de la copia profunda en los elementos internos sigue siendo sólo una copia superficial. En este momento, puede resolver llamando a la biblioteca de copias.

import copy
a = [[1,2],[3,4]]
b = copy.deepcopy(a)

19. Conversión de cajas de cadenas

s.upper() #把所有字符中的小写字母转换成大写字母
s.lower() #把所有字符中的大写字母转换成小写字母
s.capitalize() #把第一个字母转化为大写字母,其余小写
s.title() #把每个单词的第一个字母转化为大写,其余小写 

20. Generación de números aleatorios

# 生成 0 ~ 2 之间的随机数
import random
 
print(random.randint(0,2))

21. Conversión base

Convertir decimal a otras bases
Binario: bin ()
Octal: oct ()
Hexadecimal: hex ()

22. Cuente el número de apariciones de cada elemento.

from collections import Counter
string = "asfhaisfhaoif"
res = Counter(string)
print(res)
# Counter({'a': 3, 'f': 3, 's': 2, 'h': 2, 'i': 2, 'o': 1})

23. Utilice aritmética de bits para determinar números pares e impares

'''
判断奇偶  (二进制数以1结尾是奇数,以0结尾是偶数)

奇数&1==1

偶数&1==0
'''
print(6&1)
# 0
print(9&1)
# 1

24. Almacenar objetos en disco

Use pickle para guardar cualquier objeto de Python en el disco para la próxima llamada.

pickle.dump (obj, archivo [, protocolo])
  serializa el objeto y escribe el flujo de datos resultante en el objeto de archivo. El protocolo de parámetros es el modo de serialización y el valor predeterminado es 0, lo que significa serialización en forma de texto. El valor del protocolo también puede ser 1 o 2, lo que significa serialización en forma binaria.

pickle.load (archivo)
  deserializa el objeto. Analice los datos del archivo en un objeto Python.

import pickle  

a = ["fafa",(24,55)]
# 写入二进制文件
with open("pickle_test.pkl","wb") as f:
	pickle.dump(a,f,1)
	
# 读出二进制文件
with open("pickle_test.pkl","rb") as f:
	b=pickle.load(f)

print(b)
# ['fafa', (24, 55)]

25. Ordenar por valor de diccionario

Enlace original: https://blog.csdn.net/u013193903/article/details/81096367

# 现在想对字典进行排序,根据value的第一个值,即列表的第一个数字
test_dict = {
    
    
    'a': [1, 'n'],
    'b': [2, 'k', 'b'],
    'c': [5, 'h1', 'h2', 'h3', 'h4', 'h5'],
    'd': [3, 'dfg1', 'dfg2', 'df3'],
    'e': [4, 'dfg1', 'dfg2', 'dfg3', 'dfg4'],
    'f': [2, 'dfgl', 'dfg2'],
    'g': [2, 'f1', 'f2'],
}

tmp = sorted(test_dict.items(), reverse=True, key=lambda x: x[1][0])

# >>> test_dict.items()
# dict_items([('a', [1, 'n']), ('b', [2, 'k']), ('c', [5, 'h']), ('d', [10, 'dfg']), ('e', [4, 'dfg']), ('f', [2, 'dfgl']), ('g', [2, 'f'])])
# 这里的test_dict.items()实际上是将test_dict转换为可迭代对象
# ('a', [1, 'n']), ('b', [2, 'k']), ('c', [5, 'h']), ('d', [10, 'dfg']), ('e', [4, 'dfg']), ('f', [2, 'dfgl']), ('g', [2, 'f'])

# 用的是元组的第二值,即列表,取列表的第一个值,就是需要排列的数字,key=lambda x: x[1][0]

26. Código ASCII y conversión de caracteres

# 用户输入字符
c = input("请输入一个字符: ")
 
# 用户输入ASCII码,并将输入的数字转为整型
a = int(input("请输入一个ASCII码: "))
 
 
print( c + " 的ASCII 码为", ord(c))
print( a , " 对应的字符为", chr(a))

Supongo que te gusta

Origin blog.csdn.net/starvapour/article/details/112432180
Recomendado
Clasificación