2017-10-04 38 views
-1

我的主要列表文件是CSV格式的,分隔符是逗號,並且具有最多50000的素數。該文件也具有隨機換行符。Python max() - 列表中的最大元素與CSV文件中的最大元素不一樣

問題:49999是文件中最大的數字,但primes_list中的最大元素是9973!

[後來每Primes列表中的每個素數都將轉換爲long類型,並使用for循環中的值。 for prime in Primes]

因此,我的問題是我在做什麼與下面的最小Python代碼錯了?

Python版本是2.76,在Linux Mint的運行17.

編輯 - 意見後修正代碼;

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)) 

輸出示例;

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

Primes_data = csvfile.read()代替( '\ n',')( '')使用Primes_data但素數= Prime_data不。這是你的代碼還是隻是一個錯字。注意多元化的差異。另外csvfile.close是一個函數,你只是簡單地引用內存中的位置。你需要調用它,csvfile.close() –

+0

不確定你的意思是用雙引號。你應該避免用大小寫命名你的變量,這些只是變量,因爲這是一個類命名約定。您的代碼段中有很多問題。我會得到正確的Python約定,並修復你的錯誤,特別是如果這是你的源代碼。 –

+1

更正。這兩個都是在這裏的拼寫錯誤。問題依然存在 –

回答

0

那麼9973有什麼特別之處呢?你看過這個文件,那裏有一個新的行嗎?

在任何情況下,你可能想要的是csv.reader()而不是標準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() 

我沒有源,所以我不能對此進行測試,但現在看來似乎應該管用。

編輯: '分割固定一對夫婦笨臭蟲

相關問題