2017-10-04 1 views
-1

Mon fichier de liste principal est au format CSV, le délimiteur est une virgule et contient des données pour les nombres premiers jusqu'à 50000. Le fichier contient également des sauts de ligne aléatoires .Python max() - le plus grand élément dans la liste n'est pas le même que le plus gros dans le fichier CSV

Problème: 49999 est le plus grand numéro dans le fichier, mais le plus grand élément dans primes_list est 9973! [Plus tard tous les nombres premiers dans la liste Primes seront convertis en type long et utiliseront les valeurs dans une boucle for. for prime in Primes]

D'où mon problème est ce que je fais mal avec le code python minimal ci-dessous?

Python version est 2,76, sur Linux Mint 17.

Modifier - code corrigé après les commentaires;

import csv 

def factorise() 
    primes=[] 
    with open(primefile,'r') as csvfile: 
     primes_data=csvfile.read().replace('\n','').split(',') 
     primes=primes_data 
     print('Number of elements is: '+str(len(primes))) 
     print('First element is: '+primes[0]) 
     print('Last element is: '+primes[-1]) 
     csvfile.close() 
     print('Largest element is: '+max(primes)) 

Exemple de sortie;

Number of elements is: 5134 
First element is: 2 
last element is: 49999 
Largest element is: 9973 
+1

Primes_data = csvfile.read() remplacer ('\ n', ''). Split ('') utilise Primes_data mais = Prime_data ne nombres premiers pas. Est-ce dans votre code ou juste une faute de frappe ici. Notez la différence de pluralisation. Aussi csvfile.close est une fonction et vous faites simplement référence à l'emplacement en mémoire. Vous devez l'appeler, csvfile.close() –

+0

Vous ne savez pas ce que vous voulez dire par guillemets doubles. Vous devriez éviter de nommer vos variables avec des majuscules, ce sont juste des variables parce que c'est une convention de nommage de classe. Il y a beaucoup de problèmes dans votre extrait. J'obtiendrais les bonnes conventions Python implémentées et corrigerais vos fautes de frappe, surtout si c'est dans votre code source. –

+1

Corrigé. Les deux étaient des fautes de frappe ici. La question est toujours valide –

Répondre

0

Alors, quoi de neuf à propos de 9973? Avez-vous regardé le fichier et y a-t-il une nouvelle ligne?

En tout cas, ce que vous voulez sans doute est csv.reader() plutôt que la norme IO.read()

import csv 

def factorise(): 
    first_element = int() 
    total_list = list() 

    with open("primefile.csv", "r") as file: 
     primes = csv.reader(file) 
     for line in primes: 
      if not first_element: 
       print('First element is: %s' % line[0]) 
       first_element = line[0] 
      total_list.extend(line) 
     print('Number of elements is: %s' % len(total_list)) 
     print('Last element is: %s' % line[-1]) 

if __name__ == "__main__": 
    factorise() 

Je n'ai pas la source que je ne peux pas tester, mais il semble que cela devrait marcher.

EDIT:. Fixé un couple de bugs stupides