首先,如果你把这个问题分成三个步骤,那就没有问题了:1)创建 some_list 2)创建 random_list 和 3)对两个列表运行直接的列表理解(即[(x, y, f(y, m)) for x in l for y in m]
。由于某些 API 的限制,我正在使用,我希望能够用两行编写代码:1)创建 some_list 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())
])