1

オブジェクトのリストがあります。1行で、リスト内の各オブジェクトの特定の変数をコンマで区切って含む文字列を作成したいと思います。

今のところ、リスト内包表記と次のようなマップの組み合わせを使用してこれを実現できます。

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

またはラムダを使用:

','.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)

ここでラムダ関数を作成する必要はありません。また、これには反復可能なものjoin必要であるため、に渡すためだけにリストを作成する必要はありません。join

于 2013-01-09T22:54:22.933 に答える