巨大的麻木列表-如何获得n位数



目前我在numpy中有一个庞大的随机生成数字数据库。

array([62051180209, 87882444506, 49821030805, ..., 54840854303,
21222836608, 24070750502])

现在我想检查一下前05号有多少个数字,第3位和第4位有15位数字。(例如62-05-1180209,就像我名单上的第一个(

我想查一下有多少数字在其他位置有其他数字。与位置5、6类似。例如,我名单上的第一位有11号。

字符串上的操作比整数占用更多的CPU和RAM。使用整数数学代替要快得多

def get_matches(array, start, end, value): 
return np.remainder(array // 10**start, 10**(end-start)) == value

解释:

  • array // 10**start使用整数除法在末尾删除start
  • np.remainder删除除end-start后面的数字以外的所有数字
  • == value检查该值是否匹配。请注意,若要检查两位数字是否为05,则值应仅为5

正如Random Davis已经建议的那样,这可能会奏效:

import numpy as np
mylist = np.array([62011180209, 87882444506, 49821030805, 54840854303,21222836608, 24070750502])
def get_matches(mylist, start, end, value):
value = str(value)
return [str(i)[start:end+1]==value  for i in mylist]
get_matches(mylist, start=3, end=4, value=11)

对于该列表,它提供了以下结果:

[True, False, False, False, False, False]

如果应该考虑多种选择,那么使用一种简单的方法,可以将上述函数重写如下:

def get_matches_multichoice(mylist, start, end, valuelist):
valuelist = [str(value) for value in valuelist]
return [str(i)[start:end+1] in valuelist  for i in mylist]

调用是针对上述数据示例:

print (get_matches_multichoice(mylist, start=3, end=5, valuelist=np.array([111, 824, 408])) )

然后返回:

[True, True, False, True, False, False]

最新更新