lambda,python中的对象数组映射 - 返回对象列表
问题描述:
如何返回对象列表,而不是在这里列出。 我想返回测试对象的列表,而不是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已经改为小写。
答
这个问题还不清楚。我会根据我的理解来回答。
我的理解是,您正在尝试创建一个新的测试对象列表,其值为小写。
你可以通过改变每个对象的状态在一个循环做到这一点无论(改变状态,通常不推荐):
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
。
你的问题是如此不清楚。请清楚说明预期的输出和您获得的输出。您当前的代码不会输出或打印任何东西... – Julien
我想要map(lambda x:x.val.lower(),tests_lst)返回测试对象列表。它返回一个字符串列表。 – digicoder
首先,当你在类体中写入'val =“”'时,这是一个* class-level *变量,而不是一个实例属性。你有没有来自Java这样的语言?在'__init__'后面,当你写'self.val = v'时,你创建了一个影射类变量的实例变量。无论如何,'val.lower()'返回一个字符串,它填充地图返回的列表。地图是功能性的结构,用于转换数据,你不应该用它们来改变状态(尽管你可以如果你真的想要的话)。相反,做一个for循环,对于test_list中的x:x.val = x.val.lower()' –