使用python计算字符串标记的最佳方法

使用python计算字符串标记的最佳方法,python,for-loop,Python,For Loop,因此,我有以下清单: tokens = ['<greeting>', 'Hello World!', '</greeting>'] 但这行不通。 在你看来,写这个循环的最佳方式是什么? 非常感谢! alex.我认为您的方法存在一个问题,即它可能捕获误报(例如,“gree>ting”),因此仅检查结束标记是不够的 如果“containsatag”的定义仅仅意味着检查字符串是否包含一个,则可以使用正则表达式(以防您考虑更复杂的内容) 结合@aws_学徒在评论中提出的紧凑列表

因此,我有以下清单:

tokens = ['<greeting>', 'Hello World!', '</greeting>']
但这行不通。 在你看来,写这个循环的最佳方式是什么? 非常感谢!
alex.

我认为您的方法存在一个问题,即它可能捕获误报(例如,
“gree>ting”
),因此仅检查结束标记是不够的

如果“containsatag”的定义仅仅意味着检查字符串是否包含一个
,则可以使用正则表达式(以防您考虑更复杂的内容)

结合@aws_学徒在评论中提出的紧凑列表生成器方法,我们得出:

import re

regex = "<.+>"
count = sum([1 if re.search(regex, t) else 0 for t in tokens])
print(count) #done!
重新导入
regex=“”
count=sum([1如果重新搜索(regex,t)则为1,否则0表示令牌中的t])
打印(计数)#完成!
说明:


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

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

这段代码只是查看每个列表元素的开头和结尾,以确定克拉数。我是一个极端的新手,但我认为
范围(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)
tokens=[''‘你好,世界!’,'']
计数=0
对于令牌中的i:
如果我[0]。找到(“”)!=-1:
印刷品(一)
计数+=1
打印(计数)
str.find()。没有结果的
.find()
返回
-1
。如您所见,对于第一克拉,只要您的数据遵循示例列表中的方案,就可以检查
0
索引。第二个if分量是负数(使用
!=
),因为它检查列表项中的最后一个字符。我认为这里不能使用肯定的if语句,因为,
.find()
再次返回索引位置,并且您的数据可能具有可变长度。我相信你可以通过添加更多的代码使检查复杂化为阳性,但在你的情况下,这种快捷方式对我来说似乎是令人满意的。如果列表组件看起来像“Hello”


很高兴被其他人更正,这就是我在这里的原因。

以下方法检查字符串开头的

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
[4]中的
tokens=['''Hello World!','']
在[5]中:求和([1如果i.startswith(''),否则0表示令牌中的i])
Out[5]:2

我疯了吗?或者这一行程序能否达到您想要的
sum(如果令牌中的“>”为“>”,则令牌中的令牌为1)
函数
find()
返回一个索引,而不是布尔值。因此,返回的值永远不会等于
True
。如果您确实希望返回布尔值,为什么不在标记[i]中使用
'>'?您如何确定文本的其余部分都不包含
?另外,您如何确保
'>'
始终位于字符串的末尾?是否要计算字符串,如
'gree>ting'
?列表理解。另外,在那里建立一个列表是相当愚蠢的。特别是一个包含零的。
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)
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