J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)

introduction

Je pense qu'il y a des moments où l'on souhaite observer des changements dans un tableau bidimensionnel, principalement chez les pros de la compétition. DP ou DP.

S'il s'agit d'un tableau à une dimension, il est assez difficile de voir si vous «imprimez» le tableau à deux dimensions de manière séquentielle. J'ai donc préparé une fonction pour observer le changement du tableau à deux dimensions.

Cliquez ici pour le produit fini ↓

from time import sleep
def print_2d_overwrite(list2d, val_width=5, sleep_sec=1.0, header=None, highlights=[]):
    res_str = f'{header}\n' if header is not None else '' 
    for i, row in enumerate(list2d):
        for j, v in enumerate(row):
            v_str = str(v).rjust(val_width)
            if (i,j) in highlights: 
                v_str = f'\033[31m{v_str}\033[0m'
            res_str += f' {v_str}'
        res_str += '\n'
    new_line_cnt = res_str.count('\n')
    res_str += f'\033[{new_line_cnt}A'
    print(res_str, end='')
    sleep(sleep_sec)

# --- sample ---
n = 3
list2d = [ [0]*n for _ in range(n)]
for i in range(n):
    for j in range(n):
        list2d[i][j] = 3**(i+j)
        print_2d_overwrite(list2d, val_width=3, header=(i,j), highlights=[(i,j)])

L'état de fonctionnement est ↓ sample.gif

Les points sont les suivants.

(Ajouté le 19/11/2020) Dans les commentaires, j'ai reçu un style d'écriture technique.

Écraser la sortie standard

Article connexe a été publié hier et j'ai été surpris. L'article auquel j'ai fait référence pour l'implémentation est ici. Ces articles suffisent à expliquer, donc cette fois je n'expliquerai que les principaux points.

Vous pouvez déplacer le curseur de n lignes vers le haut avec \ 033 [nA". Le tableau bidimensionnel que vous souhaitez afficher est converti en la chaîne de caractères (res_str), le nombre de sauts de ligne \ n qu'il contient est compté et il est ajouté à la fin de la chaîne de caractères. Il est plus facile d'utiliser la chaîne de caractères f. N'oubliez pas end = '' dans print.

new_line_cnt = res_str.count('\n')
res_str += f'\033[{new_line_cnt}A'
print(res_str, end='')

Aligner les longueurs de valeur (afficher les chiffres)

Il est difficile de voir si les longueurs ne sont pas les mêmes comme ça

3  5  345
235  -48  123
1  2  3

Donc, je veux que la longueur (chiffre d'affichage) de chaque élément soit la même.

    3     5   345
  235   -48   123
    1     2     3

Cette fois, nous allons faire cela avec str.rjust (n). Alignez la chaîne de caractères à droite et remplissez les n caractères manquants avec les caractères spécifiés dans le deuxième argument (si rien n'est spécifié, remplissez les espaces).

v_str = str(v).rjust(val_width)

Changer la couleur de la chaîne

\ 033 [31m Chaîne de caractères dont vous voulez changer la couleur \ 033 [0m est OK. La couleur peut être réglée de «30 m» à «37 m». «31m» est rouge. (Pour plus de détails, cliquez ici](https://www.nomuramath.com/kv8wr0mp/))

Dans la fonction, nous modifions la couleur de la valeur spécifiée pour les «tons clairs». Ceci est également facile si vous utilisez la chaîne de caractères f.

if (i,j) in highlights: 
    v_str = f'\033[31m{v_str}\033[0m'

en conclusion

Je l'ai ajouté à l'extrait pro de la concurrence car il peut être utilisé pour le débogage. Je pensais que ce serait plus pratique si la partie sleep était utilisée comme entrée de touche, mais sur un Mac, il était difficile d'utiliser le clavier sans sudo, alors laissez-le tel quel.

Recommended Posts

J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait une fonction pour vérifier le modèle de DCGAN
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
Récupérer l'appelant d'une fonction en Python
Sortie sous la forme d'un tableau python
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
J'ai créé une commande appdo pour exécuter des commandes dans le contexte de l'application
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
J'ai créé un outil pour sauvegarder automatiquement les métadonnées de l'organisation Salesforce
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
J'ai créé un module Python pour traduire les commentaires
Note Python: Le mystère de l'attribution d'une variable à une variable
J'ai essayé de résumer les opérations de chaîne de Python
J'ai fait un texte Python
[Python] J'ai créé une application pour pratiquer la délicate distinction vocale des mots anglais.
[Python / C] J'ai créé un appareil qui fait défiler sans fil l'écran d'un PC à distance.
Essayez d'obtenir la liste des fonctions du paquet Python> os
J'ai créé un package pour filtrer les séries chronologiques avec python
Je veux démarrer beaucoup de processus à partir de python
J'ai fait une image ponctuelle de l'image d'Irasutoya. (partie 1)
[Python] J'ai essayé de visualiser la relation de suivi de Twitter
Je veux déterminer l'authenticité d'un élément du tableau numpy
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
J'ai essayé un peu le comportement de la fonction zip
Je veux connaître la nature de Python et pip
J'ai essayé de combattre le minimum local de la fonction Goldstein-Price
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
J'ai fait un Line-bot avec Python!
J'ai réfléchi un peu car Trace Plot du paramètre de stan est difficile à voir
J'ai créé un outil pour obtenir les liens de réponse d'OpenAI Gym en même temps
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
J'ai fait une loterie avec Python.
[Python] Faire de la fonction une fonction lambda
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai créé un démon avec Python
J'ai créé un programme en Python qui change les données de 1 minute de FX en une heure arbitraire (1 heure, etc.)
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
J'ai essayé de faire un programme pour résoudre (indice) la recherche d'erreur de Saiseriya
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Comment déterminer l'existence d'un élément sélénium en Python
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
J'ai créé une bibliothèque Python pour appeler l'API de LINE WORKS
Comment vérifier la taille de la mémoire d'une variable en Python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Je veux sortir le début du mois prochain avec Python