Bagaimana cara menambah karakter?

103

Saya baru mengenal Python, berasal dari Java dan C. Bagaimana cara menambah karakter? Di Java atau C, karakter dan int secara praktis dapat dipertukarkan, dan dalam loop tertentu, sangat berguna bagi saya untuk dapat melakukan penambahan karakter, dan indeks array berdasarkan karakter.

Bagaimana saya bisa melakukan ini dengan Python? Sudah cukup buruk tidak memiliki tradisional untuk (;;) looper - adakah cara saya dapat mencapai apa yang ingin saya capai tanpa harus memikirkan ulang seluruh strategi saya?

Untuk Tuan
sumber
4
Tradisional forlingkaran: for i in range(50): do_something_with(i). Ayolah, itu tidak terlalu buruk !!
jatanisme
@SilentGhost: Saya sedang memisahkan kamus bahasa Inggris untuk digunakan di aplikasi Android. Karena file satu per satu terlalu besar, saya telah menulis skrip Python untuk membaginya menjadi words_aa.txt, words_ab.txt, dll ... Saya perlu menulis skrip kedua untuk menghasilkan file Java dengan array yang berisi Id sumber daya file mentah dari setiap file kata (karena saya malas), dan saya tidak dapat memikirkan cara yang lebih baik untuk melakukannya.
Tom R
3
Anda sepertinya mencari sesuatu seperti[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
SilentGhost
1
@SilentGhost: Apakah hanya itu yang diperlukan? Kalau saja itu tertulis di manual.
Tom R

Jawaban:

179

Di Python 2.x, cukup gunakan fungsi orddan chr:

>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>> 

Python 3.x membuatnya lebih terorganisir dan menarik, karena perbedaan yang jelas antara byte dan unicode. Secara default, "string" adalah unicode, sehingga yang di atas berfungsi ( ordmenerima karakter Unicode dan chrmemproduksinya).

Tetapi jika Anda tertarik pada byte (seperti untuk memproses beberapa aliran data biner), semuanya menjadi lebih sederhana:

>>> bstr = bytes('abc', 'utf-8')
>>> bstr
b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'
Eli Bendersky
sumber
5
@Tom R. Jangan! [merindukan masa lalu]. Saat Anda mencoba dengan cepat mencapai sesuatu atau mengubah sepotong kode, konsep dan idiom Python mungkin tampak hanya menghalangi kemajuan Anda dan hampir tidak sebanding dengan kurva pembelajaran ... Bersabarlah! Anda bahkan mungkin menemukan bahwa dengan mahir dalam Python akan meningkatkan gaya Anda di Java (dan C, pada tingkat yang lebih rendah).
mjv
bekerja seperti pesona. <br> Satu-satunya perubahan yang akan saya lakukan adalah untuk z, dalam hal ini saya telah menetapkan 'a'.
pengguna45949
15

"cukup buruk tidak memiliki tradisional untuk (;;) looper" ?? Apa?

Apakah Anda mencoba melakukannya

import string
for c in string.lowercase:
    ...do something with c...

Atau mungkin Anda menggunakan string.uppercaseatau string.letters?

Python tidak memilikinya for(;;)karena seringkali ada cara yang lebih baik untuk melakukannya. Itu juga tidak memiliki matematika karakter karena itu juga tidak perlu.

S. Lott
sumber
1
1 untuk menjawab pertanyaan dibalik pertanyaan (masalah XY, dan seterusnya). Jika saya bisa, saya akan memberi Anda lebih banyak.
Devin Jeanpierre
Terima kasih. Saya sering kali pertama bertanya "mengapa?" untuk pertanyaan seperti ini. Tapi @SilentGhost mengalahkan saya.
S. Lotot
3

Saya berasal dari PHP, di mana Anda dapat menambahkan karakter (A ke B, Z ke AA, AA ke AB, dll.) Menggunakan operator ++. Saya membuat fungsi sederhana yang melakukan hal yang sama dengan Python. Anda juga dapat mengubah daftar karakter menjadi apa pun (huruf kecil, huruf besar, dll.) Yang Anda butuhkan.

# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    # Unique and sort
    chlist = ''.join(sorted(set(str(chlist))))
    chlen = len(chlist)
    if not chlen:
        return ''
    text = str(text)
    # Replace all chars but chlist
    text = re.sub('[^' + chlist + ']', '', text)
    if not len(text):
        return chlist[0]
    # Increment
    inc = ''
    over = False
    for i in range(1, len(text)+1):
        lchar = text[-i]
        pos = chlist.find(lchar) + 1
        if pos < chlen:
            inc = chlist[pos] + inc
            over = False
            break
        else:
            inc = chlist[0] + inc
            over = True
    if over:
        inc += chlist[0]
    result = text[0:-len(inc)] + inc
    return result
xpuu
sumber
2

Ada cara untuk menambah karakter menggunakan ascii_lettersfrom stringpackage yang ascii_lettersmerupakan string yang berisi semua alfabet Inggris, huruf besar dan kecil:

>>> from string import ascii_letters
>>> ascii_letters[ascii_letters.index('a') + 1]
'b'
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

Juga bisa dilakukan secara manual;

>>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> letters[letters.index('c') + 1]
'd'
Moein Kameli
sumber
1

Periksa ini: MENGGUNAKAN UNTUK LOOP

for a in range(5): x='A' val=chr(ord(x)+a) print(val)
OUTPUT: ABCBDE

Jaydeep_GAME
sumber
0
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

keluaran:

aammaarr
Amar Tanwar
sumber