使用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