多个列表列表中的列表理解

时间:2013-03-11 01:16:36

标签: python regex

我对一个尴尬的列表理解问题感到震惊,我无法解决。所以,我有两个列表如下所示:

a=[[....],[....],[....]]
b=[[....],[....],[....]]
len(a)==len(b) including sublists i.e sublists also have the same dimension.

现在我想做一个类似于:

的re.compile
[re.compile(_subelement_in_a).search(_subelement_in_b).group(1)]

我想知道如何使用list compherension实现上述功能 - 例如:

[[re.compile(str(x)).search(str(y)).group(1) for x in a] for y in b]

..但显然上述情况似乎不起作用,我想知道是否有人能指出我正确的方向。

修改

我刚刚意识到b的子列表比a的子列表有更多的元素。所以,例如:

a=[[1 items],[1 items],[1 items]]
b=[[10 item], [10 item], [10 item]]

我仍然希望像上面的问题那样做:

[[re.compile(str(x)).search(str(y)).group(1) for x in b] for y in a]

,输出看起来像:

c = [[b[0] in a[0] items],[b[1] in a[1] items],[b[2] in a[2] items]]

示例:

a=[["hgjkhukhkh"],["78hkugkgkug"],["ukkhukhylh"]]
b=[[r"""a(.*?)b""",r"""c(.*?)d""",r"""e(.*?)f""",r"""g(.*?)h""",r"""i(.*?)j"""],[r"""k(.*?)l""",r"""m(.*?)n""",r"""o(.*?)p""",r"""q(.*?)r"""],[r"""s(.*?)t""",r"""u(.*?)v""",r"""x(.*?)y""",r"""z(.*?)>"""]]

使用一对一映射。即检查是否:

elements of sublists of b[0] are present in sublist element of a[0]
elements of sublists of b[1] are present in sublist element of a[1]
elements of sublists of b[2] are presnet in sublist element of a[2]

2 个答案:

答案 0 :(得分:2)

自由地使用zip

[[re.search(x, y).group(1) for x,y in zip(s,t)] for s,t in zip(a,b)]

第一个zip(a,b)生成子列表对列表。第二个zip将并行子列表中的元素组合在一起。

答案 1 :(得分:2)

听起来像是在寻找zip?它需要一对列表并将其转换为成对列表。

[
    [my_operation(x,y) for x,y in zip(xs, ys)]
    for xs, ys in zip(a, b)
]

- 编辑。要求已更改:

[
    [[regex(p, s) for p in patterns] for s in strings]
    for strings, patterns in zip(a, b)
]