J'ai des dates dans un script Python avec lequel je dois travailler et qui sont dans une liste. Je dois garder le format qui existe déjà. Le format est AAAA-MM-JJ. Ils sont affichés sous la forme ['2010-05-12', '2011-04-15', 'Date', '2010-04-20', '2010-11-05'] où l'ordre des dates apparaît être aléatoire et ils sont transformés en listes avec des longueurs apparemment insignifiantes. La longueur de ces données peut devenir très grande. J'ai besoin de savoir comment trier ces dates dans un ordre chronologique et omettre les entrées apparemment placées aléatoirement de «Date» de cet ordre. Ensuite, je dois être en mesure d'effectuer des opérations mathématiques telles que le déplacement vers le haut et le bas de la liste. Par exemple, si j'ai cinq dates dans l'ordre, je dois être en mesure de prendre une date et être en mesure de trouver une date x espaces avant ou après cette date dans l'ordre. Je suis très nouveau sur Python, les explications et les implémentations les plus simples sont donc préférées. Faites-moi savoir si des éclaircissements sont nécessaires. Merci.Comment effectuer des opérations mathématiques sur des dates et les trier en Python?
Répondre
Vous posez plusieurs questions en même temps, alors je vais y répondre dans l'ordre.
Pour filtrer les "Date"
entrées, utilisez le filter
function comme ceci:
dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
dates_filtered = filter(lambda d: d != 'Date', dates)
Ou peut-être comme celui-ci, en utilisant Python's list comprehensions, si vous le trouvez plus facile à comprendre:
dates_filtered = [d for d in dates if d != 'Date']
Vous voudrez peut-être pour convertir les types de données des éléments de date dans votre liste au date
class pour avoir accès à certaines méthodes liées à la date comme ceci:
from datetime import datetime
date_objects = [datetime.strptime(x,'%Y-%m-%d').date() for x in dates_filtered]
Et pour trier les dates que vous utilisez simplement le sort
method
date_objects.sort()
La syntaxe en Python pour accéder à des éléments et des gammes d'articles dans les listes (ou tout autre type « séquence ») est assez puissant. Vous pouvez read more about it here. Par exemple, si vous voulez accéder aux deux dernières dates dans votre liste, vous pouvez faire quelque chose comme ceci:
print(date_objects[-2:]
Si vous mettez tous ensemble, vous obtiendrez quelque chose comme ceci:
from datetime import datetime
dates = ['2011-06-18', 'Date', '2010-01-13', '1997-12-01', '2007-08-11']
my_dates = [datetime.strptime(d, '%Y-%m-%d').date()
for d in dates
if d != 'Date']
my_dates.sort()
Cela ressemble à ce que je veux faire. Alors, comment vais-je faire cela? – BlackBoxTrader
J'ai ajouté quelques exemples et liens vers la documentation Python. (Ce qui est génial, et vous devriez vraiment apprendre à le contourner si vous allez faire une programmation Python sérieuse). Les exemples ci-dessus ne sont probablement pas exactement comment j'écrirais le code, je voulais juste vous montrer comment démarrer de manière simple. Codage heureux! –
En note, les exemples ci-dessus fonctionneront réellement si vous les coupez et les collez dans un fichier texte. Ils sont Python 2. [quelque chose] ainsi que Python 3 compatible. –
- 1. Comment effectuer des opérations mathématiques uniquement dans les lignes avec des nombres?
- 2. Opérations mathématiques rapides sur un tableau en python
- 3. Comment effectuer des opérations arithmétiques dans Sparql avec python?
- 4. Comment utiliser les opérations mathématiques en XAML
- 5. Comment faire des opérations mathématiques aléatoires
- 6. opérations mathématiques sur les variables de temps
- 7. select * opérations mathématiques
- 8. Effectuer des opérations de définition sur diffs?
- 9. opérations avec des dates
- 10. Opérations mathématiques sur les annotations Django
- 11. Effectuer des opérations mathématiques sur la mise à jour dynamique de javascript Valeur
- 12. Opérations sur des dates incomplètes dans MYSQL
- 13. Opérations sur les hachages Python
- 14. Référencer des entiers dans une matrice pour effectuer des opérations mathématiques dans l'objectif C
- 15. C#: Effectuer des opérations sur GPU, pas CPU (Calculer Pi)
- 16. Rails: effectuer des opérations mathématiques sur un nombre entier de base de données dans le contrôleur
- 17. Vecteur dérivé: Effectuer des opérations
- 18. Haskell Effectuer des opérations arithmétiques sur Ints et Double
- 19. Comment effectuer des opérations atomiques dans Hibernate?
- 20. Analyser les opérations mathématiques avec PHP
- 21. java - effectuer des opérations de fichiers sur des emplacements distants
- 22. Regex: Effectuer des opérations sur des groupes appariés
- 23. Comment appliquer des opérations mathématiques à chaque numéro d'une liste en python?
- 24. Opérations de chaîne sur des noeuds xml en Python
- 25. Comment effectuer des opérations de cache en C++?
- 26. Opérations sur les dates dans HQL
- 27. C# Generic Arrays et opérations mathématiques
- 28. Opérations mathématiques avec datepicker
- 29. Opérations mathématiques dans nHibernate Criteria Query
- 30. Aide sur la requête SQL pour Coldfusion - Récupération des comptages, des totaux ou d'autres opérations mathématiques
Pourquoi avez-vous besoin de les garder dans ce format? Convertissez-les en objets datetime.date et formatez-les pour l'affichage. – geoffspear
Je n'ai pas besoin de conserver ce format si je peux le reconvertir. – BlackBoxTrader
Si votre format est toujours "AAAA-MM-JJ" (c'est-à-dire non influencé par les [paramètres régionaux] actuels (http://en.wikipedia.org/wiki/Locale)), alors l'ordre [lexicographique] (http://en.wikipedia.org/wiki/Lexicographical_order) est le même que l'ordre chronologique. Juste les trier comme des chaînes! –