1

我有一个对象列表。在一行中,我想创建一个字符串,其中包含列表中每个对象的特定变量,用逗号分隔。

现在我可以使用列表理解和映射的组合来实现这一点,如下所示:

','.join(map(str, [instance.public_dns_name for instance in instances]))

或使用 lambda:

','.join(map(str, [(lambda(i): i.public_dns_name)(instance) for instance in instances]))

每个实例对象都有一个返回主机名的“public_dns_name”变量。这会返回一个像这样的字符串:

host1,host2,hos3,host4

是否可以仅使用列表理解来实现相同的目标?

4

2 回答 2

2

你不能使用列表推导,你仍然需要使用join.

使用生成器表达式更有效

','.join(str(instance.public_dns_name) for instance in instances)

列表理解如下所示:

','.join([str(instance.public_dns_name) for instance in instances])

不同之处在于它在加入之前在内存中创建整个列表,而生成器表达式将在加入组件时创建它们

于 2013-01-09T22:54:05.140 回答
0

我不确定您所说的“仅列表理解”是什么意思,您join最终仍应使用,但该过程可能远没有那么复杂:

','.join(str(instance.public_dns_name) for instance in instances)

无需在这里创建 lambda 函数。请记住,它join需要任何可迭代的,因此您不必创建一个列表只是为了将它传递给join.

于 2013-01-09T22:54:22.933 回答