2014-07-04 36 views
0

我想知道是否有可能獲得列表中每個列表的最小值。列表中的每個列表的最小數目

import csv 
data=[] 
file=input ("Enter file name: ") 
with open(file,"r") as f: 
     reader = csv.reader(f, delimiter=';') 
     for row in reader: 
     data.append(row) 
print(data) 

輸出:

[['13.25', '12.97', '13.12', '13.47', '13.44', '13.09', '12.86', '12.78', '12.91', '12.93', '12.91', '13.11'], ['12.92', '13.42', '13.58', '13.7', '13.62', '13.7', '13.31', '12.86', '12.59', '12.81', '13.46', '12.9'], ['13.39', '13.5', '13.29', '13.26', '13.38', '13.45', '13.46', '11.95', '', '12.57', '13.22', '12.88'], ['12.48', '13.76', '13.7', '13.77', '13.08', '13.48', '13.25', '12.31', '12.56', '12.56', '12.95', '13.38'], ['12.52', '14.07', '14.46', '14.13', '13.98', '14.07', '13.92', '12.7', '13.01', '12.79', '13', '13.13']] 
+0

Plesae縮進你的代碼正確。 –

+0

您的加載代碼並不能很好地說明您的實際問題。代之以包括最終陳述的輸出或其代表性子集。 – unwind

+0

@LutzHorn對不起,我仍然習慣張貼在這裏。 – Tetra

回答

2

Python有一個分功能,可以算得上列出來獲得的最低值。您可以遍歷您的data列表,並在每個列表中調用min()

for list in data: 
    print(min(list)) 

鑑於你的輸出將返回:

12.78 
12.59 

12.31 
12.52 

第三個是空的,因爲在陣列中有一個空值。


如果要刪除空字符串,你可以使用filter()

for list in data: 
    list = filter(None, list) 
    print(min(list)) 

此輸出

12.78 
12.59 
11.95 
12.31 
12.52 

而且我注意到所有的值浮動,你也可以檢查之前將它們轉換最小值,所以你不比較字符串。

for list in data: 
    list = filter(None, list) 
    list = [float(i) for i in list] 
    print(min(list)) 
+0

是否有避免空白的例外情況? – Tetra

+0

@Tetra絕對。在我們檢查分鐘之前,可以簡單地過濾。我用一個例子編輯了我的答案。 –

+0

非常感謝您的時間。 – Tetra

3

數字名單的列表的最小值可以用一個簡單的調用來實現map

numbers = [[1,3,6], [6,7,2], [0,-4]] 
minimum_numbers = map(min, numbers) 
print minimum_numbers 
# This prints: [1, 2, -4] 

這將返回一個地方min被要求在每一個元素列表「外部列表」numbers

1

首先,您需要將每個項目都轉換爲浮動。當你閱讀的數據做到這一點:與做

import csv 
data=[] 
file=input ("Enter file name: ") 
with open(file,"r") as f: 
     reader = csv.reader(f, delimiter=';') 
     for row in reader: 
      data.append([float(x) for x in row if x]) # converts values to floats, ignores empty ones 
print(data) 

一旦你的,只需撥打min()每個列表:

>>> [min(x) for x in data] 
[12.78, 12.59, 11.95, 12.31, 12.52] 

您可以縮短你的閱讀循環到這一點:

>>> with open(file, "r") as f: 
... reader = csv.reader(f, delimiter=";") 
... data = [[float(x) for x in row] for row in reader] 

>>> print([min(x) for x in data]) 
-1

我會使用地圖功能...

listOfLists = [ [2, 3, 1], [5, 7, 8], .... ] 

minValues = map(lambda x: min(x), listOfLists) 

Result: 
minValues = [1, 5, ...] 
0

我認爲你應該使用Emil Vikström's answer,但因爲你可以控制你的加載代碼就可以防止不必要的數據存儲和簡單地做:

with open(file,"r") as f: 
     reader = csv.reader(f, delimiter=';') 
     for row in reader: 
      data.append(min(map(float, row))) 
相關問題