#include <12F1822.h>
#include <String.h>
#fuses NOMCLR INTRC_IO PLL_SW
#use delay(clock=32000000)
#use rs232(baud=9600, xmit=Pin_A0, rcv=Pin_A1,enable=Pin_A2, bits=8, errors, stream=RS485)
void clear_usart_receiver(void) {
char c;
c = getc();
c = getc();
}
int id [] = {0, 2};
void main() {
while (1) {
byte message[10];
fgets(message, RS485);
delay_ms(10);
if (message[0] == '2')
{
fputs("s2 reply", RS485);
}
delay_ms(10);
clear_usart_receiver();
}
}
import numpy as np
import re
list1= ['651ac1', '21581', '13737|14047', '22262', '12281', '12226', '61415', '61495']
regexp = '[a-zA-Z]'
selection = np.array([bool(re.search(regexp, element)) for element in list1])
if True in selection:
#get_element_containing_true
看起来像这样:
selection
我想获得包含True的数组元素。我怎么得到这个?
答案 0 :(得分:3)
这里你真的需要numpy
(如果你没有,请参见@Divakar's answer)?如果您这样做,您可以将list1
转换为np.array
并将索引:
np.array(list1)[selection]
这称为boolean array indexing
。以防你感兴趣。
只是一个性能提示:如果你多次使用正则表达式:编译它并重用那个已编译的表达式:
regexp = re.compile('[a-zA-Z]')
selection = np.array([bool(regexp.search(element)) for element in list1])
这可以更快,更容易与其他答案相结合。
答案 1 :(得分:2)
您可以直接获取list-comprehension
-
[element for element in list1 if bool(re.search(regexp, element))]
仔细看看,使用搜索方法,我们得到一个匹配的对象:
In [175]: re.search(regexp, list1[0])
Out[175]: <_sre.SRE_Match at 0x7fc30bac1c60>
对于不匹配的情况,我们得到None
。
在布尔运算的上下文中,以及表达式时 在控制流语句中使用时,将解释以下值 as false:False,None,所有类型的数字零和空字符串 和容器(包括字符串,元组,列表,字典,集合 和frozensets)。所有其他值都被解释为true。 用户定义的对象可以通过提供a来自定义其真值 bool ()方法。
因此,如果搜索方法结果直接输入IF
,我们会获得匹配的对象,而None
则没有匹配。因此,使用IF
定义时,匹配将被评估为True
和False
。因此,我们可以跳过那里的bool()并有一个简化版本,如此 -
[element for element in list1 if re.search(regexp, element)]