逗号分隔的字符串中元素的数量统计

11

我正在处理如下文本字符串: LN1 2DW, DN21 5BJ, DN21 5BL, ...

在Python中,我该如何计算逗号之间的元素数?每个元素可以由6、7或8个字符组成,在我的示例中显示了3个元素。分隔符始终为逗号。

我以前从未做过任何与文本挖掘相关的事情,所以这将是我入门的开始。

3个回答

29

您可以数逗号的数量:

text.count(",") + 1
# 3

我很好奇这种方法(str.count())与split + len的基准测试结果。如果你有时间,随意进行测试。 :-) - Bram Vanroy
是的,我也想知道哪个更高效 - 计算逗号数量还是拆分并使用len? - KMunro
3
@BramVanroy 进行了一个真正快速的测试,使用 ipython 和其内置的 %timeit。结果如下:text.count(',')+1: 每个循环 665 纳秒 ± 3.06 纳秒len(text.split(',')): 每个循环 3.59 微秒 ± 19.3 纳秒测试数据是一个包含 91 个元素的列表。 - Skillmon
@KMunro请看我之前的评论。 - Skillmon

13

如果逗号(,)是分隔符,您可以在字符串上直接使用str.split然后对结果使用len(..)函数:

text = 'LN1 2DW, DN21 5BJ, DN21 5B'
number = len(text.split(','))

你也可以重复使用元素列表。例如:

text = 'LN1 2DW, DN21 5BJ, DN21 5B'
tags = text.split(',')
number = len(tags)
#do something with the `tags`

2
Text.count(',')+1 - Joran Beasley
2
这项工作确实更有效率,但下一步可能是对元素进行迭代。 - Willem Van Onsem
这里不会忽略空格。 - sagar
@sagar:在循环中,可以使用.strip等方法来简单地对每个元素进行后处理。 - Willem Van Onsem
我很好奇这种方法(split + len)与str.count()的基准测试结果。如果你有时间,随意进行测试。 :-) - Bram Vanroy
@BramVanroy:嗯,.split(..)肯定不太高效。首先,它会导致线性数量的malloc,此外,大多数Python解释器使用一些轻量级模式。 - Willem Van Onsem

2

Willien和Psidom已经提到了count

我只想补充一点,在Python中字符串也是可迭代的,因此列表推导也可以应用:

n = len([c for c in ','+text if c==','])

或者

n = sum(1 for c in ','+text if c==',')

1
为什么要这样做?Stack Overflow 应该提供最佳答案,而不是所有可能的替代方案。 - Chris_Rands
1
如果我的回答违反了SO的政策,随意投票否决它,我相信你可以请求管理员将其删除。 - Uri Goren
1
你没有违反任何规则,但为什么要提出比现有答案更差的替代方案呢?有很多可能的答案,比如你也可以包括 len(list(filter(lambda x: ord(x) == 44, text)))+1,但它真的没有增加任何东西。 - Chris_Rands

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接