Bagaimana Anda menghitung karakter berurutan dalam sebuah string dengan python?

Bagaimana saya menghitung karakter berurutan dengan Python untuk melihat berapa kali setiap digit unik berulang sebelum digit unik berikutnya?

Pada awalnya, saya pikir saya bisa melakukan sesuatu seperti

word = '1000'

counter=0
print range(len(word))


for i in range(len(word)-1):
    while word[i]==word[i+1]:
        counter +=1
        print counter*"0"
    else:
        counter=1
        print counter*"1"

Sehingga dengan cara ini saya bisa melihat berapa kali setiap digit unik berulang. Tapi ini, tentu saja, berada di luar jangkauan saat

s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
0 mencapai nilai terakhir

Dalam contoh di atas, saya ingin Python memberi tahu saya bahwa 1 mengulangi 1, dan 0 mengulangi 3 kali. Namun, kode di atas gagal karena pernyataan while saya

Saya tahu Anda dapat melakukan ini hanya dengan fungsi bawaan dan lebih memilih solusi seperti itu

Solusi terbaik

Hitungan berturut-turut

Ooh belum ada yang memposting

s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
_

Setelah itu,

s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
_2 terlihat seperti

[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
_

Dan Anda dapat memformat dengan sesuatu seperti

", ".join("{}x{}".format(label, count) for label, count in result)
# "1x3, 0x3, 2x3, 3x2, 4x2, 5x5"

Hitungan total

Seseorang di komentar khawatir bahwa Anda menginginkan jumlah total angka jadi

s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
3. Dalam hal ini Anda ingin menggunakan a

from collections import Counter

s = "11100111"
result = Counter(s)
# {"1":6, "0":2}

Metode Anda

Seperti yang telah ditunjukkan banyak orang, metode Anda gagal karena Anda mengulang

s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
5 tetapi menangani
s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
6. Hal ini menyebabkan kesalahan off-by-one ketika
s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
0 menunjuk pada indeks terakhir
s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
8, jadi
s = "111000222334455555"

from itertools import groupby

groups = groupby(s)
result = [(label, sum(1 for _ in group)) for label, group in groups]
9 memunculkan
[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
0. Salah satu cara untuk memperbaikinya adalah dengan mengulangi
[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
1, tetapi lebih pythonic untuk menghasilkan sesuatu untuk diulang

Untuk string yang tidak terlalu besar,

[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
_2 bukan masalah kinerja, jadi Anda bisa melakukannya

counts = []
count = 1
for a, b in zip(s, s[1:]):
    if a==b:
        count += 1
    else:
        counts.append((a, count))
        count = 1

Satu-satunya masalah adalah Anda harus membuat huruf khusus pada karakter terakhir jika itu unik. Itu bisa diperbaiki dengan

import itertools

counts = []
count = 1
for a, b in itertools.zip_longest(s, s[1:], fillvalue=None):
    if a==b:
        count += 1
    else:
        counts.append((a, count))
        count = 1

Jika Anda memiliki string yang sangat besar dan tidak tahan untuk menyimpan dua di antaranya dalam memori sekaligus, Anda dapat menggunakan

def pairwise(iterable):
    """iterates pairwise without holding an extra copy of iterable in memory"""
    a, b = itertools.tee(iterable)
    next(b, None)
    return itertools.zip_longest(a, b, fillvalue=None)

counts = []
count = 1
for a, b in pairwise(s):
    ...

Solusi Terkait

Javascript – Cara menghitung jumlah kunci/properti objek dalam JavaScript secara efisien

Untuk melakukan ini di lingkungan apa pun yang kompatibel, seperti Node. js, Chrome, Internet Explorer 9+, Firefox 4+, atau Safari 5+

Object.keys(obj).length
  • Kompatibilitas browser
  • Obyek. dokumentasi kunci (termasuk metode yang dapat Anda tambahkan ke browser non-ES5)

Python – Hitung jumlah kemunculan karakter dalam string

Kembalikan jumlah kejadian substring yang tidak tumpang tindih

[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
6 dalam rentang
[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
7. Argumen opsional
[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
8 dan
[("1": 3), ("0", 3), ("2", 3), ("3", 2), ("4", 2), ("5", 5)]
9 ditafsirkan sebagai notasi irisan

Bagaimana cara menghitung kemunculan berturut-turut dari karakter dalam string dengan Python?

groupby() untuk Menghitung Kemunculan Berturut-turut dengan Python.

Bagaimana cara memeriksa dua karakter berurutan dalam sebuah string dengan Python?

Python. Periksa apakah string yang diberikan berisi dua huruf berurutan yang serupa .
Contoh Solusi-1
Kode Piton. tes def (str1). kembalikan apa saja(c1 == c2 untuk c1, c2 dalam zip(str1, str1[1. ])) str = "PHP" print("String asli. ",str) print("Periksa huruf-huruf serupa yang berurutan. ",.
Flow chart
Contoh Solusi-2

Bagaimana Anda menemukan karakter berulang yang berurutan dalam sebuah string?

Periksa apakah semua bit dapat dibuat sama dengan flip tunggal
Komplemen 1 dan 2 dari Bilangan Biner
Metode yang efisien untuk komplemen 2 dari string biner
Jumlah membalik untuk membuat string biner bergantian. Tetapkan 1
Hitung string dengan 1 berturut-turut
Tambahkan dua string bit
Hitung jumlah string biner tanpa 1 berturut-turut

Bagaimana Anda menghitung jumlah karakter dalam satu baris dengan Python?

Dengan Python, Anda bisa mendapatkan panjang string str (= jumlah karakter) dengan fungsi bawaan len() .