まず、この問題を 3 つのステップに分けても問題ありません。1) some_list を作成する 2) random_list を作成する 3) 2 つのリストに対して単純なリスト内包表記を実行[(x, y, f(y, m)) for x in l for y in m]
する1) create some_list 2) リスト内包表記を実行して、2 番目の 2 番目のリストを作成し、内部で生成されたリスト自体に対して何らかの操作/関数/メソッドを許可します。
これは私ができるようにしたいことです:
import random
[(x, y, not random_list.index(y)) for x in some_list
for y in random.sample([1,2,3,4,5], (random.choice([1,2,3]))) as random_list]
as random_list
ここでは機能しないことを知っています。リスト内包表記をコーディングする前に に基づいてリストを作成すればrandom.sample([1,2,3,4,5], random.choice([1,2,3]))
、問題はありません。
質問を書き出すと、いくつかの答えが導き出されます。上記の特定の問題に対する具体的な回答は次のとおりです。
[(x, y, not i) for x in some_list
for i, y in enumerate(random.sample([1,2,3,4,5], random.choice([1,2,3])))]
私の基本的な質問は次のとおりです。リストがリスト内包内で作成された場合、そのリスト自体をリスト内包内で参照できますか? または、ある種のラッパーを作成する必要がありますか?
def wrapper():
f = lambda i, l: 42
l = random_list()
return [(i, f(i, l)) for i in l]
[(x, i, v) for x in some_list for i, v in wrapper()]
私は私の質問にほとんど答えたと思いますが、それは書く価値のある良い質問のように思えました. 他の考え、コメントがあれば、それは非常に役に立ちます。
@DSM 有効な質問。特定の(django)コードは次のとおりです。
PlayerPosition.objects.bulk_create([
PlayerPosition(
player=player,
position_id=position_id,
primary=not index
) for player in Player.objects.all()
for index, position_id in enumerate(random_position_list())
])