按值的前两个字符筛选值数组

2024-05-14 00:09:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个值数组,我想通过它们的前两个字符来过滤它

现在我的值是字符串,总是以两个字符的标识符开始,比如01,02,03。。。因此,我正在做以下工作:

payloads = []
for pay in all_payloads:
    if pay[:2] == '01':
        payloads.append(pay)

我知道我也可以做列表理解,但实际上如果可能的话,我想学习的是直接用numpy过滤它。我想也许np.where()这是一个不错的选择,但它对我不起作用

cosl = np.where(all_payloads[:2] == '01')

有人能帮我学会怎么做吗

样本输入

['011b009f2e5141cc3c07be7756e0418a9ce6bc3e1ab13e9e1ffc3f0418943e00000000'
 '011c00f51a51411de008be6f0fe541baa256bd85c2be3eb24af13fdbcb833e00000000'
 '031d0086265141240401be873fea414b64e93b4d0a923e0723f33f2c95a63e00000000'
 '011e00e62c5141a3e306be12c2ef4135d44a3c7b0e773eff51fb3f67da883e00000000'
 '021e00e62c5141a3e306be12c2ef4135d44a3c7b0e773eff51fb3f67da883e00000000'
 '011f0035335141f57107be6806f6410664e9bcd088983ee52ef13fb4b48b3e00000000'
 '012000af405141521704be0184fd41d07752bd5eadb13ef0adf33fe4279c3e00000000'
 '032100ae4351415a94fbbdf9e8024296710b3e4417c93fd77efa3f35b1043f00000000'
 '01220015525141c20601be130e06423648f7bc9341a63e6c35fd3f6972943e00000000']

多谢各位


Tags: 字符串innumpy列表forifnp数组
2条回答

您可以使用np.char模块中的函数来执行此操作:

a = np.array(["01_a", "01_b", "01_c", "02_a", "02_b", "02_c", "03_a", "03_b", "03_c"])
indices = np.where(np.char.startswith(a, "01"))
print(a[indices])

输出:

['01_a' '01_b' '01_c']

编辑:

'01'筛选添加的示例输入的输出:

['011b009f2e5141cc3c07be7756e0418a9ce6bc3e1ab13e9e1ffc3f0418943e00000000'
'011c00f51a51411de008be6f0fe541baa256bd85c2be3eb24af13fdbcb833e00000000'
'011e00e62c5141a3e306be12c2ef4135d44a3c7b0e773eff51fb3f67da883e00000000'
'011f0035335141f57107be6806f6410664e9bcd088983ee52ef13fb4b48b3e00000000'
'012000af405141521704be0184fd41d07752bd5eadb13ef0adf33fe4279c3e00000000'
'01220015525141c20601be130e06423648f7bc9341a63e6c35fd3f6972943e00000000']

指数:

(array([0, 1, 3, 5, 6, 8], dtype=int64),)

您还可以使用内置函数进行过滤。我的看法是:

filtered = list(filter(lambda x: x.startswith('01'), inputs))

相关问题 更多 >