web-dev-qa-db-ja.com

Python-リストのサブストリング内のストリングの出現回数をカウントします

リストアイテムの単純な出現回数を数えるのは次のように簡単です。

>>>[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

おかげで、リスト内の部分文字列の出現の各出現をカウントする方法を知りたいのですが。

6
theprowler

これは、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
>>> 
14
Christian Dean

あなたはこれを試すことができます:

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
1
Ajax1234

@ChristianDeanの回答は素晴らしかったですが、読みにくいです(少なくとも私にとって)。だからここはより読みやすく/理解しやすいバージョンです。

count = 0
for s in data:
    if 'foo' in s:
        count += 1
0
Urban P.

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
0
Nirmi