在python列表中放置变量

2024-04-20 04:05:34 发布

您现在位置:Python中文网/ 问答频道 /正文

以下两个循环构造基本相同。我不知道如何在第一个语法中插入两个变量start = start+2end = end+2。谢谢

第一个结构(列表理解):

start = 1
end = 3    

clips = [ImageClip(os.path.join(folder,pic))
         .resize(width=w*9.3/16)
         .set_start(start)
         .set_end(end)
         .set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))
         for pic in picfiles]

第二个构造(常规循环):

start = 1
end = 3
clips = []
for pic in picfiles:
    clips.append(ImageClip(os.path.join(folder,pic))
                 .resize(width=w*9.3/16)
                 .margin(left=31, opacity=0)
                 .set_start(start)
                 .set_end(end)
                 .set_pos(lambda t:(max((402), (int(w-3*w*t))), "center")) # move from right to center
                 )

    start = start + 2
    end = end + 2

Tags: pathlambdapososfolderwidthstartend
1条回答
网友
1楼 · 发布于 2024-04-20 04:05:34

有很多方法可以做到。例如,您可以执行以下操作:

clips = [
ImageClip(os.path.join(folder,pic))
         .resize(width=w*9.3/16)
         .set_start(index*2+1)
         .set_end(index*2+3)
         .set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))

    for index, pic in enumerate(picfiles)
]

它使用函数enumerate。这里有一个例子说明它的工作原理。你知道吗

list(enumarate(['a','b','c'])) = ((1, 'a'), (2, 'b'), (3, 'c'))

但是,在使用这种结构时,您应该非常清楚,因为它有时会导致无法理解的公式。对于您的代码,我认为这是可以的,但当您进行更复杂的计算时,常规循环通常更干净。你知道吗

如果其他值不相关,也可以使用该构造(在示例中,循环指示、开始和停止之间存在简单关系)。你知道吗

[obj.setStart(start).setStop(stop) for obj, start, stop in objects, starts, stops]

你可以定义你想要的开始和停止方式。在您的具体问题中,应该是:

clips = [
ImageClip(os.path.join(folder,pic))
         .resize(width=w*9.3/16)
         .set_start(start)
         .set_end(stop)
         .set_pos(lambda t:(max((402), (int(w-3*w*t))), "center"))

    for start, stop, pic in 
    (
        itertools.count(1, step=2),
        itertools.count(3, step=2),
        enumerate(picfiles)
    )
]

相关问题 更多 >