Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中较大的/多行字符串中计算包含两个字符串的*eath*”的行数_Python_Python 3.x_String - Fatal编程技术网

从Python中较大的/多行字符串中计算包含两个字符串的*eath*”的行数

从Python中较大的/多行字符串中计算包含两个字符串的*eath*”的行数,python,python-3.x,string,Python,Python 3.x,String,我正在看《罗密欧与朱丽叶》这部戏的全部文本,我想知道《罗密欧》和《朱丽叶》在整部戏中出现在同一行的次数剧中有多少不同的台词同时包含“罗密欧”和“朱丽叶”? 注:“gbdata”是我的数据名称,也就是剧本的整个文本。出于测试目的,我们可以使用: gbdata = ''' Romeo and Juliet # this should count once Juliet and Romeo, and Romeo, and Juliet # this a

我正在看《罗密欧与朱丽叶》这部戏的全部文本,我想知道《罗密欧》和《朱丽叶》在整部戏中出现在同一行的次数剧中有多少不同的台词同时包含“罗密欧”和“朱丽叶”?

注:“gbdata”是我的数据名称,也就是剧本的整个文本。出于测试目的,我们可以使用:

gbdata = '''
Romeo and Juliet                         # this should count once
Juliet and Romeo, and Romeo, and Juliet  # this also should count once
Romeo                                    # this should not count at all
Juliet                                   # this should not count at all
some other string                        # this should not count at all
'''
正确答案应该是
2
,因为只有前两行同时包含两个字符串;一行中的更多匹配项不会添加到总计数中

这就是我到目前为止所做的:

gbdata.count('Romeo' and 'Juliet') # counts 'Juliet's, returning 4


如何获得上述测试字符串的所需输出,
2

此处不能使用
str.count()
;它不是为你的目的而建的,因为它没有任何“线”的概念。也就是说,给定一个字符串,您可以通过拆分换行符
'\n'
,将其分解为一个单独的行列表

一个非常简洁的方法可能是:

count = sum((1 if ('Romeo' in l and 'Juliet' in l) else 0) for l in gbdata.split('\n'))
将其扩展为一组单独的命令可能如下所示:

count = 0
for line in gbdata.split('\n'):
    if 'Romeo' in line and 'Juliet' in line:
        count += 1

这里不能使用
str.count()
;它不是为你的目的而建的,因为它没有任何“线”的概念。也就是说,给定一个字符串,您可以通过拆分换行符
'\n'
,将其分解为一个单独的行列表

一个非常简洁的方法可能是:

count = sum((1 if ('Romeo' in l and 'Juliet' in l) else 0) for l in gbdata.split('\n'))
将其扩展为一组单独的命令可能如下所示:

count = 0
for line in gbdata.split('\n'):
    if 'Romeo' in line and 'Juliet' in line:
        count += 1
顺便说一句,re:the re titling——Stack Overflow的主要目标是成为一个巨大的FAQ,人们可以(最终)发现他们的编程问题已经被其他人提出并回答了。不太可能有其他人会寻找相同的字符串“罗密欧”和“朱丽叶”,因此将问题改为更一般的问题,以便具有相同潜在问题但不同直接情况的人更可能通过标题中的搜索词找到它。顺便说一句,re:重新命名——Stack Overflow的主要目标是成为一个巨大的FAQ,在这里人们可以(最终)发现他们的编程问题已经被其他人提出并回答了。不太可能有其他人会寻找相同的字符串“罗密欧”和“朱丽叶”,因此,将问题改为更一般的问题,以便有相同潜在问题但眼前情况不同的人更有可能通过标题中的搜索词找到它。