2017-01-04 64 views
1

在我們的應用中存在的常見的醫療條件的列表: -格式化內容可變長度列表

conditionsList = ['Alzheimers', 'Asmatic', 'Arthtitis', \ 
    '', '', '' \ 
    'Cardiovascular', 'Other Musculoskelatal', 'Peripheral Artery Disease'] 

當病人的詳細信息添加或更新存在着這些條件可以鏈接到第二個屏幕病人。這些以簡單的Y/N值存儲在MySQL數據庫中。然後這些閱讀: -

conditionsVal = [row[i] for row in rows for i in xrange(1, 42)] 

和子列表中創建

listVal = [historyList[i] for i in xrange(len(historyList)) if historyVal[i] == 'Y'] 

我是怎麼到這個新的列表格式到一個合理的打印輸出,因爲任何人可能都沒有存在的條件問題但其他人可能有一打或更多。

使用的初始格式是HTML。隨後通過實用程序wkhtmltopdf將其轉換爲PDF,以便在需要時進行打印/電子郵件發送。想法是避免線條纏繞,部分線條等...

+1

偏離主題但是:'listVal = [v for v,h in zip(historyList,historyVal)if h =='Y']'看起來好一點。 –

+0

「打印輸出」留下很多未指定的內容。你想將其格式化爲HTML文檔嗎? PDF?控制檯上的純文本?具有交互式屏幕控件的GUI的一部分?它會始終是等寬字體嗎? – jez

+0

@jez HTML添加到問題的要求。 – OldSteve

回答

2

沒有正確的答案或這個錯誤的答案。您可以決定如何格式化列表,然後編寫自定義格式功能。喜歡的東西:

def formatStringList(ls): 
    if len(ls) == 0: 
     return 'None' 
    elif len(ls) == 1: 
     return ls[0] 
    else: 
     return ', '.join(ls[:-1]) + ', and ' + ls[-1] 

有點輕浮測試:

lists = [[],['Cancer'],['Diabetes','Plague','AIDS','Ingrown Toenails']] 

for i,ls in enumerate(lists,start = 1): 
    print("Patient " + str(i) + " conditions: " + formatStringList(ls)) 

輸出:

Patient 1 conditions: None 
Patient 2 conditions: Cancer 
Patient 3 conditions: Diabetes, Plague, AIDS, and Ingrown Toenails 

如果在列表中的任何空字符串,你可以先過濾出來。

您可以更復雜一些,並根據需要決定最大行長度,引入顯式換行符('\n')。嘗試一下。如果你對它不滿意 - 調整它。