python函数就像一个grep在一个带有位置re的列表上

时间:2015-11-29 23:09:46

标签: regex list python-3.x

我有一些以下形式的数据:

  segs = [ '0000','0001','0002','0010','0011','0012','0100',..... '2222']

我知道一些数字,例如' 1 ...'或者' ..'或' .1.0'等,其中dot表示要填充的未知数字。如何写一个函数F(segs,digit1,digit2,digit3,digit4),它可以返回给定数字的所有匹配字符串?如果任何数字未知,我可以改为使用空字符串(或点),所以:

F(segs,'','','','')    should return full list
F(segs,1,0,0,2)        should return one-element list only
F(segs,1,2,2,'')       should return only ['1220','1221','1222']

以segs收集的字符串代表了一些形状和它们的方向,我希望具有相当快速的功能,因为它将在游戏中使用。此函数将经常调用,但不会超过一秒钟。

1 个答案:

答案 0 :(得分:3)

可以在没有可能更快的正则表达式的情况下完成。它也适用于任意数量的参数,但只检查参数的数量或检查字符串的长度,以最短者为准(如果要更改它,请修改zip部分):

def f(segs, *pattern):
    for seg in segs:
        if all(str(p) == s or p == '' for s, p in zip(seg, pattern)):
            yield seg