【问题标题】:combining for loop iterations into a single line and no match handling将 for 循环迭代合并为一行且无匹配处理
【发布时间】:2018-08-16 14:33:25
【问题描述】:

可能是一个非常基本的问题,但希望有人能提供帮助。

我有以下几点:

query = ['whole regular milk', 'gatorade is better', 'whole almond chocolate 
milk', 'chocolate milk']

types = ['whole', 'regular', 'chocolate' ]

new_list = []

for i in query:
    for k in types:
        regex_concat = r"\b" + k + r"\b"
        new_regex =  re.search(regex_concat,i)
        if (str(new_regex)) != 'None':
            print((new_regex.group()))
        else:
            print('no match')

谁的输出生成以下内容:

whole
regular
no match
no match
no match
no match
whole
no match
chocolate
no match
no match
chocolate

我的理想输出是:

whole | regular
Blank
whole | chocolate
chocolate

问题:

我想我应该能够使用以下内容将输出组合成一行:

print((new_regex.group()), end= "|", flush=True)

这会给我:

whole|regular|no match
no match
no match
no match
whole|no match
chocolate|no match
no match
chocolate|

我似乎无法弄清楚如何获得上面请求的输出。

一些补充说明--

查询列表将从 pd DataFrame 编译。从那里,我想使用所需的输出,我将其转换为列表 > 系列,映射回 pd DataFrame。这就是为什么我希望空白行仍然存在,因为最终输出应该如下所示:

Query                         Type
whole regular milk            whole | regular
gatorade is better             
whole almond chocolate milk   whole | choclate  
chocolate milk                chocolate

【问题讨论】:

    标签: python regex for-loop


    【解决方案1】:

    如果您的输入已经是一个数据框,您可以在数据框级别完成所有操作:

    import re
    
    query = ['whole regular milk', 'gatorade is better',
             'whole almond chocolate milk', 'chocolate milk', 'wholes']
    
    types = [{'type': t, 'regex': re.compile(r'\b{}\b'.format(t))}
             for t in ['whole', 'regular', 'chocolate']]
    
    df = pd.DataFrame({'Query': query})
    
    def check(q):
        return ' | '.join(type_info['type'] for type_info in types
                          if type_info['regex'].findall(q))
    
    df['Type'] = df['Query'].apply(check)
    
    print(df)
    
    #                           Query                Type
    #  0           whole regular milk     whole | regular
    #  1           gatorade is better                   
    #  2  whole almond chocolate milk   whole | chocolate
    #  3               chocolate milk           chocolate
    #  4                       wholes                            
    

    【讨论】:

    • 我选择正则表达式的原因是能够精确匹配类型,因为它们可能会在未来的迭代中成为变体。例如,如果我有整体,那么您的解决方案会在子字符串上匹配哪些类型的漏洞?
    • 对 python 也很陌生,如果我不明白,请纠正我。
    猜你喜欢
    • 2020-11-17
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 2020-07-30
    • 2022-01-18
    • 2021-04-13
    相关资源
    最近更新 更多