使用 Python 计算字符串标签的最佳方法



所以我有这个列表:

tokens = ['<greeting>', 'Hello World!', '</greeting>']

任务是计算具有 XML 标记的字符串数。 到目前为止,我所拥有的(有效)是这样的:

tokens = ['<greeting>', 'Hello World!', '</greeting>']
count = 0
for i in range(len(tokens)):
if tokens[i].find('>') >1: 
print(tokens[i])
count += 1
print(count)
else:
count += 0 

让我感到困惑的是,我倾向于将以下行用于 if 语句

if tokens[i].find('>') == True:

但它行不通。 在您看来,编写此循环的最佳方法是什么? 非常感谢! 亚历克斯。

我看到您的方法的一个问题是它可能会捕获误报(例如"gree>ting"),因此仅检查结束标记是不够的。

如果你对"包含标签"的定义只是意味着检查字符串是否包含一个<后跟一些字符,那么另一个>,你可以使用正则表达式(记住这一点,以防你正在考虑更复杂的事情)。

这与@aws_apprentice在评论中提出的紧凑列表生成器方法相结合,为我们提供了:

import re
regex = "<.+>"
count = sum([1 if re.search(regex, t) else 0 for t in tokens])
print(count) #done!

解释:

我们使用的这个单行代码称为列表生成器,它将生成一个包含 1 和 0 的列表。对于tokens中的每个字符串t,如果字符串包含标签,则将1附加到新列表中,否则附加0re.search用于检查字符串(或其子字符串)是否与给定的正则表达式匹配。

以下方法检查字符串开头的开头<,并检查字符串末尾的>

In [4]: tokens = ['<greeting>', 'Hello World!', '</greeting>']
In [5]: sum([1 if i.startswith('<') and i.endswith('>') else 0 for i in tokens])
Out[5]: 2

Anis R. 的答案应该可以正常工作,但这是一个非正则表达式的替代方案(而且不那么优雅。事实上,我会称之为笨拙)。

此代码仅查看克拉的每个列表元素的开头和结尾。我是一个极端的新手,但我认为range(len(tokens))是多余的,也可以像这样简化。

tokens = ['<greeting>', 'Hello World!', '</greeting>']
count = 0
for i in tokens:
if i[0].find('<') == 0 and i[-1].find('>') != -1:
print(i)
count += 1
print(count)

str.find()返回一个索引位置,而不是其他人注意到的布尔值,因此您的 if 语句必须反映这一点。没有结果的.find()返回-1。如您所见,对于第一克拉,只要您的数据遵循示例列表中的方案,检查索引是否为0就可以了。第二个 if 组件为负数(使用!=),因为它检查列表项中的最后一个字符。我认为您不能在那里使用正 if 语句,因为同样,.find()返回索引位置,并且您的数据可能具有可变长度。我相信您可以通过添加更多代码使检查复杂化,但该快捷方式在您的情况下对我来说似乎令人满意。它唯一不起作用的情况是,您的列表组件看起来像'<greeting> Hello'

很高兴被别人纠正,这就是我在这里的原因。

相关内容

最新更新