簡體   English   中英

將變量放在python列表中理解

[英]Placing variables inside a python list comprehension

以下兩個循環結構基本相同。 我只是無法弄清楚如何在第一個語法中插入兩個變量start = start+2end = end+2 謝謝

FIRST CONSTRUCT(列表理解):

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

有很多方法可以做到這一點。 例如,您可以執行以下操作:

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)
]

它使用枚舉函數。 這是一個顯示它有效的例子。

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)
    )
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM