我有一个对象列表。在一行中,我想创建一个字符串,其中包含列表中每个对象的特定变量,以逗号分隔。
现在,我可以使用列表推导和地图的组合来实现这一目标:
','.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
是否可以仅使用列表推导来实现相同的目标?
答案 0 :(得分:2)
您无法使用 列表理解,您仍然需要使用join
。
使用生成器表达式更有效
','.join(str(instance.public_dns_name) for instance in instances)
列表理解将如下所示:
','.join([str(instance.public_dns_name) for instance in instances])
不同之处在于它在连接之前在内存中创建了整个列表,而生成器表达式将在连接时创建组件
答案 1 :(得分:0)
我不确定“只有列表理解”是什么意思,你最终仍然应该使用join
,但这个过程可能远没有那么复杂:
','.join(str(instance.public_dns_name) for instance in instances)
这里不需要创建lambda函数。请记住join
接受任何可迭代,因此您无需创建列表只是为了将其传递给join
。