おそらく良くないが、itertools.groupby
を使用して行うことがありますより読みやすく柔軟性があります。
from itertools import groupby
def group_by_startswith(it, n):
"""Get a dict mapping the first n characters to the number of matches."""
def first_n(str_):
return str_[:n]
startswith_sorted = sorted(it, key=first_n)
groups = groupby(startswith_sorted, key=first_n)
return {key: len(list(grouped)) for key, grouped in groups}
出力例:
>>> list1 = ["1thing", "2thing", "3thing", "1thing"]
>>> print(group_by_startswith(list1, 3))
{'3th': 1, '2th': 1, '1th': 2}
このソリューションは、あなたの結果にもう少し柔軟に行うことができます。たとえば、戻り線を変更してgrouped
またはlist(grouped)
を返すと、簡単に一致するオブジェクトを取得できます。
"最初の2文字を比較したいのは、最初の3文字が同じで、文字列全体が同じであることがわかっているからです。将来に壊れるかもしれない仮説のように聞こえる。なぜ単にリスクを避け、文字列全体をチェックするだけではないのですか?あなたは余分な合併症とリスクから何を得ますか? –
組み込みのコレクションで使用できるときにチェックを行うことを全面的に行う理由もあります。カウンターモジュール – cobie
現実には、10万文字を超える文字列をチェックしています長さは約80文字で、すべてではなく最初の25文字を確認する方が早いかもしれません。これが本当かどうかわかりませんが、私はそれを試してみようとしています。 – ohblahitsme