【问题标题】:Counting Substrings from a List, inside a String计算字符串内列表中的子字符串
【发布时间】:2018-05-25 15:55:53
【问题描述】:

我想要一个子字符串列表在字符串内部查找,并接收子字符串在该字符串中出现的次数。

list = ['one', 'two', 'three']
str = "one one two four five six"
count = str.count(list)

所以在这个例子中,count 应该是 3。但是,.count() 由于某种原因不能从列表中读取字符串,所以我不知道如何解决这个问题。

【问题讨论】:

  • 那不是元组,那是列表……
  • 下面 3 个答案中有 2 个是基于输入字符串始终是完整单词的假设。所以我不得不问:tup = ['foo']str = 'foobar' 的预期输出是什么? 0 还是 1?
  • 啊,你是对的,我的错。我会解决的。

标签: python string list counter


【解决方案1】:

一种方法是将sum 与生成器表达式一起使用,并利用set 进行O(1) 查找。 str.split() 将您的字符串拆分为一个列表,以空格分隔。

str_set = {'one', 'two', 'three'}
x = 'one one two four five six'

count = sum(i in str_set for i in x.split())

print(count)  # 3

之所以可行是因为boolint 的子类,所以我们可以将True 元素相加,就好像它们是整数一样。

注意你有一个列表和字符串,不涉及元组。此外,不要在类之后命名变量(例如liststrset)。

【讨论】:

  • 这绝对是最高效的答案,但对于初学者来说可能更难理解。并不是说这不是最好的方式……它是。
  • 这个好像有预期的结果,谢谢你的帮助!
【解决方案2】:

我认为您想要的是以下内容

count = sum([str.count(e) for e in tup))

sums 中的tup 中的任何substring 出现在str 中的次数。

另外,您的tuplelist。要使其成为tuple(不可变),请使用(

('one', 'two', 'three')

此外,您应该使用变量名 str_(标准 python 约定)以避免重载 str 对象。

【讨论】:

    【解决方案3】:

    使用生成器表达式和sum:

    count = sum(1 for x in the_string.split(" ") if x in tup)
    

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 2021-01-24
      • 2017-10-20
      相关资源
      最近更新 更多