Finding consecutive text elements in list that match pattern

回眸只為那壹抹淺笑 提交于 2021-02-11 13:29:05

问题


I am dealing with lists ls that look like the following:

ls = ['y4','j8','Le1','Retx3','MNxe4','Xe4','Xf4','Xe5']

Given one such list, I am trying to find out if it contains 3 consecutive elements that match the following pattern:

  • 3 consecutive elements starting with the letter X, and having the same length (here 3).
  • And their ending digits may only correspond to either of the following cases: denote the ending digit of the first found element by n, then the allowed sequences of the 3 ending digits can be: n, n, n+1, n, n, n-1, n, n+1, n, or n,n-1,n.

So in the example ls shown above, we indeed find a matching pattern in the list: 'Xe4', 'Xf4', 'Xe5', where all mentioned criteria are validated (with the ending digits being of type n,n,n+1).

Question

  • Are there simple and efficient approaches for such list-based pattern matching purposes inherent to python? Reading similar discussions tells me one should opt for itertools capabilities, such as groupby, but I haven't been able to make much progress.

My first intuition and without itertools, being for the first time subject to such task, is to simply loop over the list elements, and as soon as one of the conditions is met (such as matching starting letters), I pause and inspect the remaining conditions. So in my loop, given iterator i, I'd be constantly checking for pattern emerging from the elements, i-2, i-1, i, i-1, i, i+1, and i, i+1, i+2. But this has become already a bit messy and filled with conditionals that are hard to sanity check. The point in efficiency lies in the fact that I intend to eventually loop over millions of such lists and look for the pattern. Any insights for how to do this in a manner typified by Python would be very helpful.

来源:https://stackoverflow.com/questions/64106974/finding-consecutive-text-elements-in-list-that-match-pattern

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!