bugfix> python > 投稿

文字列の内部を検索する部分文字列のリストを作成し、その文字列に部分文字列が出現する回数を受け取りたいです。

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

したがって、この例では、countは3である必要があります。ただし、.count()は何らかの理由でリストから文字列を読み取ることができないため、それを回避する方法がわかりません。

回答 3 件
  • 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
    
    

    これが機能する理由は bool です   int のサブクラスです 、したがって True を合計できます  整数であるかのように要素。

    リストと文字列があり、タプルは含まれていないことに注意してください。さらに、クラスの後に変数に名前を付けないでください(例: liststrset )。

  • あなたが望むのは次のものだと思います

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

    どの sums  任意の substring の回数  で tup   str に表示されます 。

    また、あなたの tuple  は list です 。それを tuple にするには  (不変)、 ( を使用

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

    また、変数名 str_ を使用する必要があります  (標準のPython規約) str のオーバーロードを回避する  オブジェクト。

  • ジェネレーター式と sum を使用する :

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

あなたの答え