2014-02-18 62 views
0

我有一個列表a = ['type1','type2','type3'],我有一個函數。在函數中我想返回列表,但沒有' '。這可能嗎?當我返回時,我得到了" "如何返回一個不包含「」的函數列表

+0

你的意思是返回它作爲一個字符串?像'[type1,type2,type3]'? – Linuxios

+0

是的。就像一個字符串,沒有「」或「」 – user3297266

+0

如果你的意思是「喜歡」一個字符串,請參閱@ Martin的答案。如果你的意思是一個字符串,像'「[%s]」%','。join(a)'就可以做到。 – Linuxios

回答

4

Python向您顯示容器中的值,如列表值表示;對於字符串,這意味着您顯示的是文字字符串值,並帶有引號。

這樣做不是表示字符串值包含實際引號。

你當然也可以打印一些東西到終端,顯示只是字符串值,用逗號連接,並用方括號包圍:

print '[{0}]'.format(', '.join(yourlist)) 

但這不會改變列表對象,也不應該你想至。

至於你的代碼,這裏有什麼問題是你正在修改模塊中的global列表。當您導入模塊make_table(tresort_liste, sla_liste, wb)線運行,這改變了table_listelbmer

>>> import yourmodule 
[['b\xc3\xb8k', 155.73786516665265], ['eik', 200.23439807141054], ['rogn', 149.1107219680717], ['poppel', 152.3522594021602], ['furu', 876.0254915624212], ['gran', 350.4101966249685], ['douglasgran', 778.6893258332633]] 
>>> yourmodule.table_liste 
[['b\xc3\xb8k', 155.73786516665265], ['eik', 200.23439807141054], ['rogn', 149.1107219680717], ['poppel', 152.3522594021602], ['furu', 876.0254915624212], ['gran', 350.4101966249685], ['douglasgran', 778.6893258332633]] 
>>> yourmodule.lbmer 
[155.73786516665265, 200.23439807141054, 149.1107219680717, 152.3522594021602, 876.0254915624212, 350.4101966249685, 778.6893258332633] 

您的測試然後運行make_table功能再次和測試參數被追加到這些全局列表。其結果是,該方法比你期待返回更多的數據和測試失敗:

>>> names = ['abc', 'def', 'ghi'] 
>>> sla = [1, 2, 4] 
>>> lbm = [15.3, 7.65, 3.825] 
>>> zip(*yourmodule.make_table(names, sla, 50000)) 
[('b\xc3\xb8k', 'eik', 'rogn', 'poppel', 'furu', 'gran', 'douglasgran', 'abc', 'def', 'ghi'), (155.73786516665265, 200.23439807141054, 149.1107219680717, 152.3522594021602, 876.0254915624212, 350.4101966249685, 778.6893258332633, 155.73786516665265, 200.23439807141054, 149.1107219680717)] 

這個故事的寓意:不要使用全局變量。

您的代碼可以簡化爲:

import math 

def compute_lbm(sla, wb): 
    return (0.3 + math.sqrt(0.0045 * wb))/sla 

def make_table(tresorter, slaer, wb): 
    return [[sort, compute_lbm(sla, wb)] for sort, sla in zip(tresorter, slaer)] 

if __name__ == '__main__': 
    sla_liste = [0.045, 0.035, 0.047, 0.046, 0.008, 0.020, 0.009] 
    tresort_liste = ["bøk", "eik", "rogn", "poppel", "furu", "gran", "douglasgran"] 
    wb = 10000 

    print make_table(tresort_liste, sla_liste, wb) 

這亦不會使用全局變量。當用作模塊時,最後的print make_table()調用也不會被執行,只有當您直接將此文件作爲主腳本運行時。

您正在使用assertAlmostEqual()缺少placesdelta參數,您需要指定輸出需要匹配的距離。

您正在追逐的引號在這裏絕對不是問題。

+0

@Aaron:僅在Python 2.6及更早版本中才需要'0';對於Python 2.7和3.x位置插槽是自動編號的。 –

+0

你是否知道那些已經承諾使用Python的大公司仍然停留在早期版本中?我整天使用2.6。 {0}是向前兼容的,但{}不向後兼容。 –

+0

@AaronHall:當然,但這可能是評論而不是編輯。 :-) –

相關問題