努比。哪里在使用regex的字符串数组上

2024-04-18 09:22:19 发布

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

我有这样一个数组:

array = ['A0','A1','A2','A3','A4','B0','B1','C0']

并希望获得一个数组,该数组对于后跟从0到2的数字的值为真。你知道吗

到目前为止,我是这样做的:

selection = np.where ((array == 'A0') | (array == 'A1') | (array == 'A2'), 1, 0)

但是,有没有更优雅的方法来实现这一点,比如使用一个正则表达式,比如:

selection = np.where (array == 'A[0-1]', 1, 0)

Tags: 方法a2a1np数字数组b0where
3条回答

如果选择使用熊猫:

import numpy as np
import pandas as pd

a = np.array(['A0','A1','A2','A3','A4','B0','B1','C0'])
pd.Series(a).str.match(r'A[0-2]')
# 0     True
# 1     True
# 2     True
# 3    False
# 4    False
# 5    False
# 6    False
# 7    False
# dtype: bool

我不认为numpy是你最好的解决方案。您可以使用内置的python工具(如map)来实现这一点。你知道吗

import re

array = ['A0','A1','A2','A3','A4','B0','B1','C0']
p = r'A[0-2]'

list(map(lambda x: bool(re.match(p, x)), array))
# returns
[True, True, True, False, False, False, False, False]

# to get an array:
np.array(list(map(lambda x: bool(re.match(p, x)), array)))
# returns:
array([ True,  True,  True, False, False, False, False, False])

如果它不比A0A1A2复杂,那么可以使用

a = np.array(['A0','A1','A2','A3','A4','B0','B1','C0'])
np.in1d(a, ['A0', 'A1', 'A2'])
# array([ True,  True,  True, False, False, False, False, False])

相关问题 更多 >