0

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

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

我想知道如何使用列表理解来实现上述目标 - 例如:

[[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]
4

2 回答 2

3

听起来像你在寻找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)
]
于 2013-03-11T01:23:39.503 回答
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个将并行子列表中的元素配对在一起。

于 2013-03-11T01:17:38.450 回答