Conseils à connaître lors de la programmation de compétitions avec Python2 (bibliothèque utile)

La partie concernant la bibliothèque de astuces à connaître lors de la programmation de la compétition avec Python2 a été divisée.

La version Python est ** 2.7.5 ** (En Python3, les spécifications telles que l'entrée et la sortie sont très différentes, il est donc recommandé de se référer à d'autres articles).

Voici quelques bibliothèques que je trouve utiles, bien qu'elles soient un peu mineures.

Ensemble de fonctions mathématiques mathématiques

Je l'écrirai un jour.

Itertools pour obtenir des séquences, des combinaisons, etc.

9.7. Itertools - Fonction de génération d'itérateur pour une exécution de boucle efficace

Utilisez itertools pour obtenir des combinaisons et des séquences en Python | CUBE SUGAR STORAGE

Une bibliothèque remplie de méthodes pour générer des itérateurs.

En programmation compétitive, il est utile lors de la génération de séquences et de combinaisons (correspondant à next_permutation en C ++). Il fonctionne beaucoup plus rapidement que de tourner plusieurs boucles par vous-même, vous devez donc l'utiliser activement.

permutations.py


import itertools

l = range(1, 6) # [1, 2, 3, 4, 5]

#Sélectionnez deux éléments dans l et organisez-les
#Ne considérez pas la duplication
#La commande est considérée(permutation)
for elem in itertools.permutations(l, 2):
    print elem #Le taple des éléments disposés est attribué à elem

output


(1, 2)
(1, 3)
(1, 4)
(1, 5)
(2, 1)
(2, 3)
(2, 4)
(2, 5)
(3, 1)
(3, 2)
(3, 4)
(3, 5)
(4, 1)
(4, 2)
(4, 3)
(4, 5)
(5, 1)
(5, 2)
(5, 3)
(5, 4)

combinations.py


import itertools

l = range(1, 6) # [1, 2, 3, 4, 5]

#Sélectionnez 3 éléments de l et disposez-les
#Ne considérez pas la duplication
#Ne considère pas la commande(combinaison)
for elem in itertools.combinations(l, 3):
    print elem

output


(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
(1, 3, 4)
(1, 3, 5)
(1, 4, 5)
(2, 3, 4)
(2, 3, 5)
(2, 4, 5)
(3, 4, 5)

Par ailleurs, il est également possible d'obtenir des combinaisons prenant en compte la duplication et les produits cartésiens (produits directs).

combinations_with_replacement.py


import itertools

l = range(1, 6) # [1, 2, 3, 4, 5]

#Disposer les deux ensembles d'éléments extraits de l
#Envisagez la duplication
#Ne considère pas la commande
for elem in itertools.product(l, repeat=2):
    print elem

output


(1, 1)
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(2, 2)
(2, 3)
(2, 4)
(2, 5)
(3, 3)
(3, 4)
(3, 5)
(4, 4)
(4, 5)
(5, 5)

cartesian_product.py


import itertools

l = range(1, 6) # [1, 2, 3, 4, 5]

#Disposer les deux ensembles d'éléments extraits de l
#Envisagez la duplication
#La commande est considérée
for elem in itertools.product(l, repeat=2):
    print elem
    
#Le code ci-dessus est équivalent au code suivant
for a in l:
    for b in l:
        print (a, b) 

output


(1, 1)
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(2, 1)
(2, 2)
(2, 3)
(2, 4)
(2, 5)
(3, 1)
(3, 2)
(3, 3)
(3, 4)
(3, 5)
(4, 1)
(4, 2)
(4, 3)
(4, 4)
(4, 5)
(5, 1)
(5, 2)
(5, 3)
(5, 4)
(5, 5)

collections

8.3. Collections - type de données conteneur hautes performances - documentation Python 2.7ja1

Le module de collections Python est sobre et pratique-Yuimono Seishin @Scaled_Wurm

defaultdict

Comme son nom l'indique, collections.defaultdict est un dict avec des valeurs par défaut.

Dans la programmation compétitive, il existe de nombreuses possibilités de créer des compteurs (en particulier pour les problèmes de jeu d'implémentation).

Par exemple, lorsqu'une question est posée sur la fréquence des mots anglais existant dans l'entrée, il est nécessaire de créer un compteur correspondant à chaque mot à l'aide de dict, mais dict initialise la clé. Sinon, une erreur se produira, ce qui est gênant.

En utilisant defaultdict, vous pouvez réduire l'initialisation et rendre le code plus facile à lire.

from collections import defaultdict

l = ['to', 'be', 'or', 'not', 'to', 'be', 'that', 'is', 'the', 'question']

#Pour dict
d = {}
for e in l:
    #Vérifiez s'il y a une valeur de clé à chaque fois, sinon, vous devez initialiser
    if e in d.keys():
        d[e] += 1
    else:
        d[e] = 1
print d # {'be': 2, 'is': 1, 'not': 1, 'or': 1, 'question': 1, 'that': 1, 'the': 1, 'to': 2}

dd = defaultdict(int) #Toutes les clés sont initialisées avec 0
for e in l:
    dd[e] += 1 #Pas besoin d'initialiser
print dd # defaultdict(<type 'int'>, {'be': 2, 'that': 1, 'is': 1, 'question': 1, 'to': 2, 'not': 1, 'the': 1, 'or': 1})
print dd['be'] # 2

dd2 = defaultdict(list) #Toutes les clés[]Initialisé avec
dd2['a'].append(1)
print dd2 # defaultdict(<type 'list'>, {'a': [1]})

Compteur utile pour créer des compteurs

collections.Counter est un objet spécialisé pour la création de compteur, et 0 est automatiquement défini comme valeur initiale. C'est équivalent à defautdict (int), mais il existe d'autres fonctions utiles telles que la valeur maximale peut être obtenue immédiatement.

from collections import Counter

l = ['to', 'be', 'or', 'not', 'to', 'be', 'that', 'is', 'the', 'question']

c = Counter()
for e in l:
    c[e] += 1
print c # Counter({'be': 2, 'is': 1, 'not': 1, 'or': 1, 'question': 1, 'that': 1, 'the': 1, 'to': 2})
print c['be'] # 2

#Si vous passez une liste etc. comme argument, elle sera comptée automatiquement
c2 = Counter(l) 
print c2 # Counter({'be': 2, 'is': 1, 'not': 1, 'or': 1, 'question': 1, 'that': 1, 'the': 1, 'to': 2})

#Trier par valeur de compteur décroissante
print c.most_common() # [('be', 2), ('to', 2), ('that', 1), ('is', 1), ('question', 1), ('not', 1), ('the', 1), ('or', 1)]

#Sorties 3 dans l'ordre de celle avec la plus grande valeur de compteur
print c.most_common(3) # [('be', 2), ('to', 2), ('that', 1)]

Recommended Posts

Conseils à connaître lors de la programmation de compétitions avec Python2 (bibliothèque utile)
Conseils à savoir lors de la programmation de compétitions avec Python2
Conseils (entrée / sortie) à connaître lors de la programmation de compétitions avec Python2
Conseils (structure de contrôle) à connaître lors de la programmation de la compétition avec Python2
Conseils (structure de données) à connaître lors de la programmation de compétitions avec Python2
Connaissances à connaître lors de la programmation de concours avec Python2
Conseils à savoir lors de la programmation de la compétition avec Python2 (Autres spécifications du langage)
Programmation compétitive avec python
Vous devez savoir si vous utilisez Python! 10 bibliothèques utiles
[python] [vscode] Lorsque vous vous fâchez avec space-tab-mixed
Qu'utilisez-vous lorsque vous testez avec Python?
BigQuery-Python s'est avéré utile lors de l'utilisation de BigQuery à partir de Python
3. 3. Programmation IA avec Python
Programmation Python avec Atom
Programmation avec Python Flask
Je connais? Analyse de données à l'aide de Python ou de choses que vous souhaitez utiliser quand vous le souhaitez avec numpy
Opération utile lorsque vous souhaitez résoudre tous les problèmes dans plusieurs langages de programmation avec Codewars
Jusqu'à ce que vous puissiez installer votre propre bibliothèque Python avec pip
Programmation avec Python et Tkinter
Utile lors du débogage avec TouchDesigner
[Astuces] Gérez Athena avec Python
Erreur lors de la lecture avec python
Programmation réseau avec Python Scapy
Connaissance de l'algèbre linéaire que vous devez savoir lorsque vous faites de l'IA
Entrée standard Python3 pour une programmation compétitive
Ravi de vous rencontrer avec python
[Python] Programmation orientée objet apprise avec Pokemon
Programmation facile Python + OpenCV avec Canopy
[HyperledgerIroha] Requête avec la bibliothèque Python
Jusqu'à ce que Python fonctionne sur Apache
Quand matplotlib ne fonctionne pas avec python2.7
Lors de l'utilisation de MeCab avec python dans virtualenv
Précautions lors de l'utilisation de six avec Python 2.5
Python | Ce que vous pouvez faire avec Python
[Python] Formater quand to_csv avec des pandas
Ce que les utilisateurs d'Emacs doivent savoir lors de l'écriture de code Python dans Sublime Text