リストアイテムの単純な出現回数を数えるのは次のように簡単です。
>>>[1, 2, 3, 4, 1, 4, 1].count(1)
3
しかし、方法を知りたいのは、文字列がリストエントリの部分文字列に現れるたびにカウントすることです。
たとえば、foo
がリストdata
に何回出現するかを確認します。
data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]
実行:
d_count = data.count('foo')
print("d_count:", d_count)
生成する:
d_count: 0
私もやってみました:
d_count = data.count(any('foo' in s for s in data))
print("d_count:", d_count)
しかし、それはまた生成します:
d_count: 0
おかげで、リスト内の部分文字列の出現の各出現をカウントする方法を知りたいのですが。
これは、sum
組み込み関数を使用して行うことができます。 list.count
も使用する必要はありません。
>>> data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]
>>> sum('foo' in s for s in data)
2
>>>
このコードは、ブール値を整数として処理できるため機能します。 'foo'
が文字列要素に現れるたびに、True
が返されます。 True
の整数値は1
です。つまり、'foo'
が文字列内にあるたびに1
を返すようになります。したがって、返された1
を合計すると、要素に1
が出現した回数がわかります。
上記のコードを書くためのおそらくより明示的で同等の方法は次のとおりです。
>>> sum(1 for s in data if 'foo' in s)
2
>>>
あなたはこれを試すことができます:
from itertools import chain
data = ["the foo is all fooed", "the bar is all barred", "foo is now a bar"]
data = list(chain.from_iterable([i.split() for i in data]))
print(data.count("foo"))
出力:
2
@ChristianDeanの回答は素晴らしかったですが、読みにくいです(少なくとも私にとって)。だからここはより読みやすく/理解しやすいバージョンです。
count = 0
for s in data:
if 'foo' in s:
count += 1
Data = ["fooのアババ"、 "アババ"]の場合
リストから"aba"の出現を検索するには、以下のコードを使用する必要があります。
>>> data = ["abababa in foo", "abababa"]
>>> str = "aba"
>>> length = len(str)
>>> sum(element[index:index+length] == str for element in data for index,char in enumerate(element))
6