2016-07-29 379 views
0

如何返回對象列表,而不是在這裏列出。 我想返回測試對象的列表,而不是STR的列表..lambda,python中的對象數組映射 - 返回對象列表

class test: 
    val = "" 
    def __init__(self,v): 
     self.val = v 
    def tolower(self,k): 
     k = k.val.lower() 
     return k 

def test_run(): 
    tests_lst = [] 
    tests_lst.append(test("TEST-0")) 
    tests_lst.append(test("TEST-1")) 
    tests_lst.append(test("TEST-2")) 
    i_want_object_of_test = map(lambda x:x.val.lower(),tests_lst) 

if __name__ == '__main__': 
    test_run() 

OUTPUT: [ '測試 - 0', '測試 - 1', '測試-2']

我想要一個測試對象的列表,其中每個對象的val已經改爲小寫。

+1

你的問題是如此不清楚。請清楚說明預期的輸出和您獲得的輸出。您當前的代碼不會輸出或打印任何東西... – Julien

+0

我想要map(lambda x:x.val.lower(),tests_lst)返回測試對象列表。它返回一個字符串列表。 – digicoder

+0

首先,當你在類體中寫入'val =「」'時,這是一個* class-level *變量,而不是一個實例屬性。你有沒有來自Java這樣的語言?在'__init__'後面,當你寫'self.val = v'時,你創建了一個影射類變量的實例變量。無論如何,'val.lower()'返回一個字符串,它填充地圖返回的列表。地圖是功能性的結構,用於轉換數據,你不應該用它們來改變狀態(儘管你可以如果你真的想要的話)。相反,做一個for循環,對於test_list中的x:x.val = x.val.lower()' –

回答

0

這個問題還不清楚。我會根據我的理解來回答。

我的理解是,您正在嘗試創建一個新的測試對象列表,其值爲小寫。

你可以通過改變每個對象的狀態在一個循環做到這一點無論(改變狀態,通常不推薦):

for test_obj in test_lst: 
    test_obj.val = test_obj.val.lower() 

通過列表理解來做到這一點的方法是創建新的測試實例:

i_want_object_of_test = [test(test_obj.val.lower()) for test_obj in test_lst] 

此外,還有一些問題與你的測試類:

  • 它,我您應該始終從您的類中的對象繼承:class test(object):
  • 您可以通過將val = ""'放入您的類defenition中來定義類變量,然後在每個實例中重寫它。
  • 您的tolower方法獲取另一個測試實例(k)並以小寫形式返回其值。我假設你想要返回一個新的測試對象或改變當前的測試對象。無論哪種方式,該方法應該只使用self
+0

[test_obj.val.lower())for test_obj in test_lst]是我尋找的魔術線​​,我知道不會在迭代時使對象狀態發生變化。感謝您對python指南的幫助。 – digicoder

+0

如果我有汽車(對象),並且在那裏我有引擎是引擎(對象)的一個實例:並且引擎有一個名爲val =「」的文本屬性,我想要將所有val屬性更改爲小寫。你能幫忙嗎? – digicoder

+0

@digicoder取決於您是否要更改每個引擎的val狀態,更改每個引擎的引擎,或者完全創建它們的副本。 –