Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python

introduction

Bibliothèque standard

bisect ** Algorithme de dichotomie de séquence **

bisect_left(a, x, lo=0, hi=len(a))

Renvoie la position où $ x $ peut être inséré dans $ a $ pour la liste triée $ a $. Si $ a $ contient $ x $, le point d'insertion sera avant (à gauche) toute valeur $ x $ existante.

bisect_right(a, x, lo=0, hi=len(a)) Similaire à bisect_left (), mais si $ a $ contient $ x $, le point d'insertion sera après (à droite) toute valeur $ x $ existante.

from bisect import bisect_left, bisect_right

a = [1, 2, 2, 2, 3, 5]
print(bisect_left(a, 2))  # -> 1
print(bisect_right(a, 2))  # -> 4

** Exemple de problème **

heapq ** Algorithme de file d'attente de tas / Algorithme de file d'attente prioritaire **

heappush(heap, item)

Poussez l'élément vers le tas.

heappop(heap)

Renvoie le plus petit élément du tas.

from heapq import heappop, heappush

a = []
heappush(a, (10, 'x'))
heappush(a, (5, 'y'))
heappush(a, (1, 'z'))

print(a)  # -> [(1, 'z'), (10, 'x'), (5, 'y')]
print(heappop(a))  # -> (1, 'z')
print(heappop(a))  # -> (5, 'y')
print(heappop(a))  # -> (10, 'x')

collections ** Type de données du conteneur **

deque Un conteneur de type liste qui peut effectuer des ajouts et des pop à grande vitesse aux deux extrémités. appendleft () et poplift () peuvent être réalisés plus rapidement que les opérations équivalentes sur list.

from collections import deque

q = deque(['a', 'b', 'b', 'b', 'd', 'd'])
print(q.popleft())  # -> a
print(q)  # -> deque(['b', 'b', 'b', 'd', 'd'])
q.appendleft('z')
print(q)  # -> deque(['z', 'b', 'b', 'b', 'd', 'd'])

Counter

Une sous-classe du dictionnaire qui compte les objets hachables. Pour compter le nombre d'un élément, vous pouvez utiliser la méthode count () de la liste ou du tuple, mais c'est pratique pour compter le nombre de tous les éléments.

from collections import Counter

l = ['a', 'b', 'b', 'b', 'd', 'd']
t = ('a', 'b', 'b', 'b', 'd', 'd',)
print(l.count('b'))  # -> 3
print(t.count('b'))  # -> 3
c = Counter(l)
print(c)  # -> Counter({'b': 3, 'd': 2, 'a': 1})
#Renvoie tous les éléments dans l'ordre décroissant du nombre
print(c.most_common())  # -> [('b', 3), ('d', 2), ('a', 1)]

Vote ABC008 B Code

itertools ** Fonction de génération d'itérateur pour une exécution de boucle efficace **

product(*iterables, repeat)

Renvoie le produit direct de plusieurs itérables.

from itertools import product

l = ['a', 'b', 'c']
m = ['x', 'y']
print(list(product(l, m)))
# -> [('a', 'x'), ('a', 'y'), ('b', 'x'), ('b', 'y'), ('c', 'x'), ('c', 'y')]

permutations(iterable, r)

Renvoie une séquence de longueur r à partir de l'élément de iterable.

from itertools import permutations

l = ['a', 'b', 'c']
print(list(permutations(l, 3)))
# -> [('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]
print(list(permutations(l, 2)))
# -> [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]

combinations(iterable, r) Renvoie la combinaison lors de la sélection de r parmi les éléments de iterable.

from itertools import combinations

l = ['a', 'b', 'c', 'd', 'e']
print(list(combinations(l, 2)))
# -> [('a', 'b'), ('a', 'c'), ('a', 'd'), ('a', 'e'), ('b', 'c'), ('b', 'd'), ('b', 'e'), ('c', 'd'), ('c', 'e'), ('d', 'e')]

** Exemple de problème ** ABC123 A Five Antennas Code

functools ** Manipulation des fonctions d'ordre supérieur et des objets appelables **

lru_cache(maxsize, typed) Un décorateur qui enveloppe une fonction dans un objet appelable pour mémorandum. Économisez jusqu'à la taille maximale des appels récents. Il peut être utilisé dans la conversion de mémo.

from functools import lru_cache
 
@lru_cache(maxsize=None)
def fib(n):
	if n < 2:
		return n
	return fib(n - 1) + fib(n - 2);
 
print(fib(100))  # -> 354224848179261915075
print(fib.cache_info())  # -> CacheInfo(hits=98, misses=101, maxsize=None, currsize=101)

reduce(function, iterable[, initializer])

Les éléments itérables sont appliqués de manière cumulative de la gauche à une fonction qui prend deux arguments, et le résultat est renvoyé.

from functools import reduce

def f(a, b):
	return a * b

l = [1, 2, 3, 4, 5]
# ((((1 * 2) * 3) * 4) * 5)Équivalent à
print(reduce(f, l))  # -> 120

fractions ** Nombre raisonnable **

gcd(a, b) Renvoie l'engagement maximum des entiers $ a $ et $ b $.

Si vous voulez trouver le multiple commun minimum, implémentez lcm comme suit.

from fractions import gcd

def lcm(a, b):
    return a*b // gcd(a, b)

** Exemple de problème ** ABC070 C Multiple Clocks Code

Édition supplémentaire

Présentation de fonctions intégrées pouvant être utilisées par les professionnels de la compétition.

pow() ** Puissance **

$ pow (x, y [, z]) $ renvoie le reste de $ z $ pour $ x \ ^ y $ ou $ x \ ^ y $. En utilisant ceci, l'élément inverse de $ a $ dans $ mod $$ p $ peut être obtenu par $ pow (a, p-2, p) $.

Il peut être utilisé pour trouver le reste de $ p $, qui est le nombre de combinaisons pour sélectionner $ k $ à partir de $ n $.

def nCk(n, k, p):
    ret = 1
    for i in range(k):
        ret = ret * (n - i) * pow(i + 1, p - 2, p) % p
    return ret

** Exemple de problème ** Itinéraire ABC034 C Code

Recommended Posts

Peut être utilisé chez les pros de la compétition! Bibliothèque standard Python
Résumé de l'entrée standard de Python pouvant être utilisée dans Competition Pro
Algorithmes de base utilisables par les pros de la compétition
[Redash] La bibliothèque standard ne peut pas être utilisée dans la fonction python
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Scripts pouvant être utilisés lors de l'utilisation de Bottle en Python
Nouvelles fonctionnalités de Python 3.9 (1) -L'opérateur d'ensemble de somme peut être utilisé dans le type de dictionnaire.
Module standard Python utilisable en ligne de commande
Fonctions pouvant être utilisées dans l'instruction for
Utilisation des fonctions récursives utilisées chez les pros de la compétition
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
Notes sur les connaissances Python utilisables avec AtCoder
compréhension de liste car operator.methodcaller ne peut pas être utilisé avec python 2.5
Operators ++, - ne peut pas être utilisé en python (différence de php)
Les équations simultanées non linéaires peuvent être facilement résolues avec Python.
Résumé des méthodes d'analyse de données statistiques utilisant Python qui peuvent être utilisées en entreprise
Entrée standard Python3 (compétition pro)
Remplacer les fonctions de bibliothèque en Python
Matrice transposée au standard Python
Comment déboguer une bibliothèque Python standard dans Visual Studio
Ce que vous pouvez faire avec les statistiques de la bibliothèque Python standard
Goroutine (contrôle parallèle) utilisable sur le terrain
Goroutine utilisable sur le terrain (édition errgroup.Group)
SSD 1306 OLED peut être utilisé avec Raspeye + python (Remarque)
[Python3] Code qui peut être utilisé lorsque vous souhaitez redimensionner des images dossier par dossier
Ce qui semble être un modèle pour la partie d'entrée standard du pro de la concurrence en python3
[Python] J'ai créé ma propre bibliothèque qui peut être importée dynamiquement
8 commandes fréquemment utilisées dans Python Django
À propos de psd-tools, une bibliothèque capable de traiter des fichiers psd en Python
[Python] Connaissances de base utilisées dans AtCoder
Rendre la sortie standard non bloquante en Python
33 chaînes à ne pas utiliser comme noms de variables en python
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
Windows10: Installation de la bibliothèque MeCab pour python
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
Remplissage facile des données pouvant être utilisées dans le traitement du langage naturel
J'ai créé un modèle de projet Python générique
Optimisation mathématique pour un travail gratuit avec Python + PuLP
[Python, Julia] Affichage 3D dans la bibliothèque Jupyter-Mayavi
[python] Techniques souvent utilisées dans l'apprentissage automatique
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Tkinter n'a pas pu être importé en Python
Bibliothèque standard Python: seconde moitié (mémo d'apprentissage Python ⑨)
Bibliothèque standard Python: première moitié (mémo d'apprentissage Python ⑧)
[Python3] Code qui peut être utilisé lorsque vous souhaitez découper une image dans une taille spécifique
[2015.02.22] Youtube-dl a été mis à jour et ne peut plus être utilisé dans les versions précédentes.
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
Notes personnelles des opérations liées aux pandas qui peuvent être utilisées dans la pratique
Programme d'installation facile et programme de mise à jour automatique pouvant être utilisé dans n'importe quelle langue
Obtenez toutes les entrées standard utilisées dans la programmation paiza et compétition avec int (python)
Liste des outils qui peuvent être utilisés pour essayer facilement l'analyse des émotions des phrases japonaises avec Python (essayez avec google colab)
Comment utiliser la bibliothèque C en Python
Jusqu'à ce que vous puissiez utiliser youtube-dl avec Synology (DS120j)
Types de fichiers pouvant être utilisés avec Go
Comment utiliser la bibliothèque d'images Python dans la série python3
Techniques souvent utilisées dans le codage court en python (Bloc-notes)
Remarques sur l'utilisation de dict avec python [Competition Pro]