带有符号的过滤器字符串出现某些时间

时间:2018-11-08 14:56:38

标签: python string

如何创建仅在具有“ _”两次的循环字符串中接受的条件。

a = ['q_s_e','s_e_v_e','s_v']# many more like these

在上面的列表中,仅拳头项应在循环中使用:

for i in a:
    if '_' in i:
         ...

这花了一切。

如何做到?

5 个答案:

答案 0 :(得分:3)

您可以从字符串中使用count函数:

a = ['q_s_e','s_e_v_e','s_v']
for i in a:
    if i.count('_') == 2:
      print ('hooray')
  

简单来说,count()方法将在给定的子字符串中进行搜索   字符串,并返回子字符串在其中出现的次数。

     

还需要使用可选参数start和end来指定   字符串中的开始位置和结束位置。

     

count()方法的语法为:

     

string.count(substring,start = ...,end = ...)

另一种方法是也从头开始过滤字符串数组:

a = ['q_s_e','s_e_v_e','s_v']
for i in filter(lambda k: k.count('_') == 2, a):
    print ('hooray')

答案 1 :(得分:1)

您可以使用str.count并遍历生成器表达式:

for i in (el for el in a if el.count('_') == 2):
    # do something

答案 2 :(得分:0)

您需要使用count()方法指定条件:

for item in list:
    if item.count('_') == 2:
        ...

答案 3 :(得分:0)

使用regex,这将返回您想要的列表:

filtered_list = [e for e in old_list if re.match('^[^_]*(_[^_]*){2}$', e)]

正则表达式^[^_]*(_[^_]*){2}$将确保每个元素都恰好包含2个_

答案 4 :(得分:0)

您还可以使用numpy解决此问题并删除循环:

arr = np.array(['q_s_e','s_e_v_e','s_v'])
new_arr = arr[np.where(np.char.count(arr, "_") == 2)[0]]