Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでの大規模なグループの位置


小文字の文字列Sがあるとすると、これらの文字は同じ文字の連続したグループを形成します。したがって、Sのような文字列が「abbxxxxzyy」のような場合、グループ「a」、「bb」、「xxxx」、「z」、および「yy」があります。 3文字以上のグループは大きなグループになります。すべての大規模なグループの開始位置と終了位置が必要です。

したがって、入力が「abcdddeeeeaabbbcd」のような場合、出力は[[3,5]、[6,9]、[12,14]]

になります。

これを解決するには、次の手順に従います-

  • ans:=新しいリスト
  • csum:=0
  • 連続する文字を含む文字のグループを作成する際のa、bごとに、
    • grp:=グループ化されたアイテムリスト
    • grpのサイズ>=3の場合、
      • (csum、csum + grpのサイズ-1)のリストをansに挿入します
    • csum:=csum+grpのサイズ
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

from itertools import groupby
class Solution:
   def largeGroupPositions(self, S):
      ans = []
      csum = 0
      for a, b in groupby(S):
         grp = list(b)
      if len(grp) >= 3:
         ans.append([csum, csum+len(grp)-1])
         csum+=len(grp)
   return ans
ob = Solution()
print(ob.largeGroupPositions("abcdddeeeeaabbbcd"))

入力

"abcdddeeeeaabbbcd"

出力

[[3, 5], [6, 9], [12, 14]]

  1. Pythonの正規表現のgroups()メソッドとは何ですか?

    re.groups()メソッド このメソッドは、1からパターン内のグループの数までの一致のすべてのサブグループを含むタプルを返します。デフォルトの引数は、試合に参加しなかったグループに使用されます。デフォルトはNoneです。それ以降のバージョン(1.5.1以降)では、このような場合にシングルトンタプルが返されます。 例 >>> m = re.match(r"(\d+)\.(\d+)", "27.1835") >>> m.groups() ('27', '1835') 小数点以下の桁数とそ

  2. Pythonを使用してファイルの所有者を変更するにはどうすればよいですか?

    pwd、grp、osモジュールを使用して、ファイルまたはディレクトリの所有者を変更できます。 uidモジュールは、ユーザー名からuidを取得するために使用され、grpはgidグループ名の文字列を取得するために使用され、osは所有者を変更するために使用されます。 例 import pwd import grp import os uid = pwd.getpwnam("nobody").pw_uid gid = grp.getgrnam("nogroup").gr_gid path = 'my_folder' os.chown(path,