2 votes

Comment inverser plusieurs listes ?

scores=open('scores.csv','r')

for score in scores.readlines():
    score = score.strip()
    rev=[]
    for s in reversed(score[0:]):
        rev.append(s)
    print(rev)

Voici mon code, ce que je vais faire, c'est imprimer la liste inversée de scores.csv.

Si j'imprime scores au début, le résultat est :

['0.74,0.63,0.58,0.89\n', '0.91,0.89,0.78,0.99\n', '0.43,0.35,0.34,0.45\n', '0.56,0.61,0.66,0.58\n', '0.50,0.49,0.76,0.72\n', '0.88,0.75,0.61,0.78\n']

Il semble normal, et si j'imprime score après avoir retiré tous les \n dans la liste, le résultat est :

0.74,0.63,0.58,0.89
0.91,0.89,0.78,0.99
0.43,0.35,0.34,0.45
0.56,0.61,0.66,0.58
0.50,0.49,0.76,0.72
0.88,0.75,0.61,0.78

le résultat est toujours correct, mais si j'imprime à la fin du code, il s'affiche :

['9', '8', '.', '0', ',', '8', '5', '.', '0', ',', '3', '6', '.', '0', ',', '4', '7', '.', '0']
['9', '9', '.', '0', ',', '8', '7', '.', '0', ',', '9', '8', '.', '0', ',', '1', '9', '.', '0']
['5', '4', '.', '0', ',', '4', '3', '.', '0', ',', '5', '3', '.', '0', ',', '3', '4', '.', '0']
['8', '5', '.', '0', ',', '6', '6', '.', '0', ',', '1', '6', '.', '0', ',', '6', '5', '.', '0']
['2', '7', '.', '0', ',', '6', '7', '.', '0', ',', '9', '4', '.', '0', ',', '0', '5', '.', '0']
['8', '7', '.', '0', ',', '1', '6', '.', '0', ',', '5', '7', '.', '0', ',', '8', '8', '.', '0']

il semble que python convertisse mon résultat de décimal en entier, mais quand j'essaie d'utiliser float(s) pour le reconvertir, cela me donne une erreur. Je voudrais savoir ce qui ne va pas avec mon code ?

0voto

Jean-François Fabre Points 94672

toujours utiliser csv pour lire les fichiers csv. Ce module analyse les données, les divise en fonction des virgules, etc...

Votre tentative consiste simplement à inverser la ligne char par char. Je la réécrirais complètement en utilisant csv qui donne les tokens déjà séparés par une virgule (par défaut) :

import csv
with open('scores.csv','r') as scores:

    cr = csv.reader(scores)
    rev = []
    for row in cr:
       rev.append(list(reversed(row))

qui ne convertit pas les données en float, ceci dit, je remplacerais la boucle par une compréhension + conversion float

rev = [[float(x) for x in reversed(row)] for row in cr]

0voto

tikker Points 106

Dans votre approche, score est une chaîne de caractères, donc il fait exactement ce que vous lui demandez : inverser la ligne entière caractère par caractère. Vous pouvez faire deux choses :

  1. Utilisez le csv pour lire votre fichier CSV (recommandé), pour obtenir une liste de valeurs flottantes, puis inverser cela.
  2. Divisez votre ligne sur des virgules, puis inversez cette liste, et enfin recousez-la. Un moyen simple d'inverser une liste en Python est le suivant mylist[::-1] .

Pour le numéro 2, ce serait quelque chose comme :

score = score.strip()
temp = score.split(',')
temp_reversed = temp[::-1]
score_reversed = ','.join(temp_reversed)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X