计入列表

时间:2017-08-19 14:53:38

标签: python

我需要编写一个函数tag_count,它将一个字符串列表作为参数。它应该返回这些字符串中有多少是XML标记的计数。如果字符串是以左尖括号“<”开头的XML标记,则可以判断它是否为XML标记并以直角括号“>”结束。

def tag_count(input_list):
    found = 0
    counts = input_list.count('<')
    for key in input_list:
        if key == counts:
            found += 1
    return found

测试tag_count函数:

list1 = ['<greeting>', 'Hello World!', '</greeting>']
count = tag_count(list1)
print("Expected result: 2, Actual result: {}".format(count))

有人可以告诉我为什么这不起作用 - 并提出来 使用def函数的东西。

目前正在返回:预期结果:2,实际结果:0

5 个答案:

答案 0 :(得分:2)

您尝试计算列表中单个'<'的字符串数量时遇到的主要问题。您需要遍历列表并计算以尖括号开头和结尾的字符串:

>>> def tag_count(lst):
    return sum(s[0] == '<' and s[-1] == '>' for s in lst)

>>> 
>>> list1 = ['<greeting>', 'Hello World!', '</greeting>']
>>> count = tag_count(list1)
>>> count
2
>>>

如果您的数据中可能存在空字符串,请使用str.starstwithstr.endswith而不是编制索引以避免IndexError

return sum(s.startswith('<') and s.endswith('>') for s in lst) 

答案 1 :(得分:1)

考虑Cuberanswer,一种安全可读的XML标记计数方法可能是:

def is_key_XML(key):
    try :
        return (key[0] == '<') and (key[-1] == '>')
    except IndexError:
        return False

def tag_count(input_list):
    return sum(is_key_XML(k) for k in input_list)

测试可能是:

list1 = ['<greeting>', 'Hello World!', '</greeting>', '< Graou', 'L', '<>', '']
count = tag_count(list1)
print("Expected result: 3, Actual result: {}".format(count))

答案 2 :(得分:0)

def tag_count(input_list):
    found = 0
    for key in input_list:
        if (len(key) > 1) and (key[0] == '<') and (key[-1] == '>'):
            found += 1
    return found

您需要检查密钥中的字符是否与&#39;&gt;&#39;或者&#39;&lt;&#; 此外,len(key) > 1检查字符串是否至少包含2个字符。

答案 3 :(得分:0)

您可以用列表理解符号来编写它:

requested_strs = len([s for s in input_list if s and s.startswith('<') and s.endswith('>')])

即使这是一个简单的解决方案,我也不建议使用正则表达式。编译正则表达式以匹配字符串并匹配它们将需要花费很多时间来执行一个简单的检查..

答案 4 :(得分:0)

list1 = ['<greeting>', 'Hello World!', '</greeting>', '']
import re
len( [ s for s in list1 if re.match(r'<.*>', s) ] )

输出: 2