计算列表中出现的项目-python方式
我的守则如下:计算列表中出现的项目-python方式,python,list,Python,List,我的守则如下: result = 0 for line_A in text_A: for line_B in text_B: if line_A in line_B: result += 1 break return result / len(text_A) 这很简单:如果text\u A中的line\u A存在于text\u B中,则对其进行计数并检查另一行。我想知道我是否缺少一些实用工具,或者这种方法是100%正确的吗
result = 0
for line_A in text_A:
for line_B in text_B:
if line_A in line_B:
result += 1
break
return result / len(text_A)
这很简单:如果
text\u A
中的line\u A
存在于text\u B
中,则对其进行计数并检查另一行。我想知道我是否缺少一些实用工具,或者这种方法是100%正确的吗?tia您可以将两个文本转换为集合,然后选择交叉点,如下所示
len(set(text_A) & set(text_B)) / len(text_A)
sum(any(line_A in line_B for line_B in text_B) for line_A in text_A)/len(text_A)
但这里的问题是,如果有重复的文本,那么它只会被计算一次。所以,您可能想使用
sum(line_A in text_B for line_A in text_A) / len(text_A)
但是如果行A
可以位于行B
中的任何位置,那么您所拥有的是正确的,并且可以这样简洁地编写
len(set(text_A) & set(text_B)) / len(text_A)
sum(any(line_A in line_B for line_B in text_B) for line_A in text_A)/len(text_A)
您可以将这两个文本转换为集合,然后进行交叉,如下所示
len(set(text_A) & set(text_B)) / len(text_A)
sum(any(line_A in line_B for line_B in text_B) for line_A in text_A)/len(text_A)
但这里的问题是,如果有重复的文本,那么它只会被计算一次。所以,您可能想使用
sum(line_A in text_B for line_A in text_A) / len(text_A)
但是如果行A
可以位于行B
中的任何位置,那么您所拥有的是正确的,并且可以这样简洁地编写
len(set(text_A) & set(text_B)) / len(text_A)
sum(any(line_A in line_B for line_B in text_B) for line_A in text_A)/len(text_A)
如果我对你的问题理解正确,这可能会有帮助:
from collections import Counter
>>> text_a = 'some text'
>>> a = Counter(text_a.split())
>>> text_b = 'other text'
>>> b = Counter(text_b.split())
>>> a & b
Counter({'text': 1})
如果我对你的问题理解正确,这可能会有帮助:
from collections import Counter
>>> text_a = 'some text'
>>> a = Counter(text_a.split())
>>> text_b = 'other text'
>>> b = Counter(text_b.split())
>>> a & b
Counter({'text': 1})
我不太明白第三个。如果第二个解决方案不匹配,它在哪里工作?@wils484第二个解决方案将匹配精确的行,但第三个解决方案将匹配,即使
line\u A
是line\u B
的子字符串。是的,我的代码完成了我需要它完成的任务。text_A=['ab','cd']
和text_B=['abab','cdab','cd']
的正确输出应为2/2=1
。我喜欢简洁的版本,谢谢。我不太明白第三个版本。如果第二个解决方案不匹配,它在哪里工作?@wils484第二个解决方案将匹配精确的行,但第三个解决方案将匹配,即使line\u A
是line\u B
的子字符串。是的,我的代码完成了我需要它完成的任务。text_A=['ab','cd']
和text_B=['abab','cdab','cd']
的正确输出应为2/2=1
。我喜欢简洁的版本,谢谢。A行在B行中
-你真的是指那里的?如果文本A有一行ham
,文本B有一行hamburger
,是否将其作为匹配项计算?(如果是这样的话,您是否从字符串的末尾删除了换行符?@user2357112是的,它是原型的一部分,
中的将替换为更健壮的匹配行中的a行中的B行中的-您真的是指中的?如果文本A有一行ham
,文本B有一行hamburger
,是否将其作为匹配项计算?(如果是这样,您是否已从字符串末尾删除了换行符?@user2357112是的,它是原型的一部分,
中的将替换为更健壮的匹配