统计lis中搜索字符串的出现次数

2024-10-02 22:33:37 发布

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

我有以下清单:

data_items = ['abc','123data','dataxyz','456','344','666','777','888','888', 'abc', 'xyz']

我有一个搜索项目列表:

^{pr2}$

我想使用搜索列表迭代匹配项的data_项,并构建一个为每个匹配项提供计数的基本结构。e、 g

counts = ['abc':'2', '123':'1', 'xyz':'2'.........]

最好的办法是什么?在


Tags: 项目列表dataitems结构计数abccounts
3条回答

您可以使用re.searchcollections.Counter,例如:

import re
from collections import Counter

data_items = ['abc','123data','dataxyz','456','344','666','777','888','888', 'abc', 'xyz']
search = ['abc','123','xyz','456']

to_search = re.compile('|'.join(sorted(search, key=len, reverse=True)))
matches = (to_search.search(el) for el in data_items)
counts = Counter(match.group() for match in matches if match)
# Counter({'abc': 2, 'xyz': 2, '123': 1, '456': 1})
counts={}
for s in search:
    lower_s=s.lower()  
    counts[lower_s]=str(data_items.count(lower_s))

如果你不介意用字典的话(因为你说的是结构,这是一个更好的选择)。在

看来你也需要部分匹配。下面的代码是直观的,但可能不是有效的。也假设你对dict结果没问题。在

>>> data_items = ['abc','123data','dataxyz','456','344','666','777','888','888', 'abc', 'xyz']
>>> search = ['abc','123','xyz','456']
>>> result = {k:0 for k in search}
>>> for item in data_items:
        for search_item in search:
            if search_item in item:
                result[search_item]+=1
>>> result
{'123': 1, 'abc': 2, 'xyz': 2, '456': 1}

相关问题 更多 >