制作组合来自多个列表中的每个项目的项目列表

时间:2017-04-19 13:32:24

标签: python-2.7

我为Pygame编写了一个模块,它使用淡入,淡出,放大,缩小,旋转等文本进行视频效果。程序运行正常。我想写一个演示,突出显示模块的所有可能性。所有效果如下。

import copy

zoom = ["in", "out"]
fade = ["in", "out"]
rotate = ["left", "right"]
slide = ["in left", "in right", "in top", "in bottom","out left", "out right", "out top", "out bottom"]

我需要在每种类型中使用每种效果与所有其他类型中的每种效果结合使用除了缩小淡出和缩小淡入淡出,这在视觉上没有多大意义。我需要这些效果,对于一组来说是四个,按照缩放,淡入淡出,旋转,滑动的顺序,在特定格式的单独列表中(temp = [None,None,None,None]。如果没有影响一个插槽,它将是None。下面给出一个例子。

(zoom = "out", rotate = "left", fade = "out", slide = "out top")

这是我到目前为止的代码。

functions_main = [zoom, fade, rotate, slide]
function_list = []
temp = [None,
for count, item in enumerate(functions_main):
    for part in item:
        t = copy.copy(temp)
        t[count] = part
        function_list.append(t)

这给了我每组中的每个项目一次。如下图所示。

['in', None, None, None]
['out', None, None, None]
[None, 'in', None, None]
[None, 'out', None, None]
[None, None, 'left', None]
[None, None, 'right', None]

等。等等  我如何获得其他项目?例如放大,淡入,向左旋转,不滑动将是("in", "in", "left", None)

2 个答案:

答案 0 :(得分:0)

我在每个列表中添加了None,以便更轻松地进行组合:

zoom = ["in", "out", None]
fade = ["in", "out", None]
rotate = ["left", "right", None]
slide = ["in left", "in right", "in top", "in bottom","out left", "out right", "out top", "out bottom", None]

result = [[i, j, k, l] for i in zoom for j in fade for k in rotate for l in slide if not ((i == 'in' and j == 'out') or (j == 'in' and i == 'out'))]

答案 1 :(得分:0)

通过https://stackoverflow.com/users/133203/federico-klez-culloca向正确的方向轻推后,我发现最简单的方法就是使用itertools。

mylist = list(itertools.product(funcs[item[0]], funcs[item[1]]))