[英]Placing variables inside a python list comprehension
以下兩個循環結構基本相同。 我只是無法弄清楚如何在第一個語法中插入兩個變量start = start+2
和end = 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.