lambda,python中对象数组上的映射 - 返回对象列表

时间:2016-07-29 04:33:20

标签: python python-2.7

如何返回对象列表而不在此处列出。 我想返回一个测试对象列表,而不是一个str ..列表。

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

输出: ['test-0','test-1','test-2']

我想要一个测试对象列表,其中每个对象的val已更改为小写。

1 个答案:

答案 0 :(得分:0)

问题不明确。我会按照我的理解回答。

我的理解是您正在尝试创建一个新的测试对象列表,其值为小写。

您可以通过更改for循环中每个对象的状态来执行此操作(通常不建议更改状态):

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 = ""'放入类防御来定义类变量,然后在每个实例中覆盖它。
  • 您的tolower方法获取另一个测试实例(k)并将其值作为小写返回。我假设您要么返回一个新的测试对象,要么更改当前的测试对象。无论哪种方式,该方法都应该只使用self