当substring和string都是列表时,如何找到字符串中子字符串的计数?

时间:2017-09-04 07:45:18

标签: python string python-3.x list loops

我正在尝试计算出现在另一个列表(Y)中的一个列表(X)的单词。我正在迭代的列表在一个字符串中有多个单词。

示例:

X = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']

Y = ['def', 'xyz', 'abc', 'tuv']

OUTPUT应该是这样的:

Y项目数:

def = 2
xyz = 2
abc = 2

我尝试了什么:

for obj in X:
    for item in Y:
        if obj in item:
            freq = obj.count(item)
            print (freq)

我也尝试了列表理解,但我认为情况并非如此。

3 个答案:

答案 0 :(得分:2)

使用内置sum()功能的短单行解决方案:

x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']
y = ['def', 'xyz', 'abc', 'tuv']
result = {i: sum(w.count(i) for w in x) for i in y}

print(result)

输出:

{'def': 2, 'xyz': 2, 'tuv': 0, 'abc': 2}

<强> ----------

collections.Counter对象:

import collections
x = ['abc def ghi klm', 'xyz bef mno', 'jkl mno pqr abc', 'xyz mno def']
y = ['def', 'xyz', 'abc', 'tuv']

c = collections.Counter(' '.join(x).split())
result = {i: c[i] for i in y if i in c}

print(result)

输出:

{'abc': 2, 'def': 2, 'xyz': 2}

答案 1 :(得分:1)

你可以做的是迭代X列表,操纵你的字符串以分隔空格(这样你将每个单词分开)然后使用Counter类来创建一个dict,它只计算Y中存在的项目的出现次数

function callfun(value) { 
    if(value == "paragraph1") { 
        // do something 
    } else if(value == "paragraph2") { 
        // do something 
    } else if(value == "paragraph3") { 
        // do something 
    } else { 
        // do something 
    } 
}

答案 2 :(得分:0)

不确定我是否得到了您所需要的(在您的示例中不应该def = 2?),但我认为这可能接近您的需求:

from collections import defaultdict
from itertools import product

counts = defaultdict(int)
for x, y in product(X, Y):
    if y in x:
        counts[y] += 1

您可以通过运行来检查输出:

for k, v in counts.items():
    print('{} = {}'.format(k, v))

打印:

def = 2
abc = 2
xyz = 2