Apakah ada cara untuk mensubstring string dengan Python, untuk mendapatkan string baru dari karakter ketiga ke akhir string?
Mungkin suka myString[2:end]
?
Jika meninggalkan bagian kedua berarti 'sampai akhir', dan jika Anda meninggalkan bagian pertama, apakah itu dimulai dari awal?
Jawaban:
Python menyebut konsep ini "mengiris" dan berfungsi lebih dari sekadar string. Lihatlah di sini untuk pengantar yang komprehensif.
sumber
Hanya untuk kelengkapan karena tidak ada orang lain yang menyebutkannya. Parameter ketiga ke irisan array adalah langkah. Jadi membalikkan string itu sesederhana:
Atau memilih karakter alternatif adalah:
Kemampuan untuk melangkah maju dan mundur melalui string mempertahankan konsistensi dengan mampu menyusun irisan dari awal atau akhir.
sumber
Substr () biasanya (yaitu PHP dan Perl) bekerja dengan cara ini:
Jadi parameternya adalah
beginning
danLENGTH
.Tetapi perilaku Python berbeda; ia mengharapkan awal dan satu setelah AKHIR (!). Ini sulit dikenali oleh pemula. Jadi pengganti yang tepat untuk Substr (s, awal, LENGTH) adalah
sumber
s[beginning:][:length]
Cara yang umum untuk mencapai ini adalah dengan mengiris tali.
MyString[a:b]
memberi Anda substring dari indeks a ke (b - 1).sumber
Satu contoh tampaknya hilang di sini: salinan lengkap (dangkal).
Ini adalah ungkapan umum untuk membuat salinan tipe urutan (bukan string yang diinternir)
[:]
,. Dangkal menyalin daftar, lihat sintaks slice daftar Python digunakan tanpa alasan yang jelas .sumber
a=b
harus cukup.[:]
pada tipe yang tidak berubah sama sekali tidak membuat salinan. Sementaramysequence[:]
sebagian besar tidak berbahaya ketikamysequence
adalah jenis berubah sepertistr
,tuple
,bytes
(Py3) atauunicode
(Py2),a = b[:]
setara dengana = b
, itu hanya limbah sedikit waktu pengiriman kode byte mengiris mana objek merespon untuk dengan kembali sendiri sejak gunanya itu untuk copy dangkal saat , selain dari tes identitas objek, itu setara dengan hanya mengembalikan referensi lain ke diri yang kekal seseorang.s[:]
tidak membuat salinan sama sekali:s = 'abc'; s0 = s[:]; assert s is s0
. Ya itu adalah cara idiomatis untuk menyalin daftar dengan Python hingga daftar didapatlist.copy
, tetapi sepotong penuh dari tipe yang tidak dapat diubah tidak memiliki alasan untuk membuat salinan karena tidak dapat diubah, jadi mungkin hanya ada satu di memori dan kita seharusnya tidak membuang waktu menyalinnya. Karena jawaban ini salah dan bahkan tidak menjawab pertanyaan - haruskah itu dihapus?Ya, ini benar-benar bekerja jika Anda menetapkan, atau mengikat , nama,
end
, untuk tunggal konstan,None
:Notasi slice memiliki 3 argumen penting:
Standarnya saat tidak diberikan adalah
None
- tetapi kami dapat meneruskannya secara eksplisit:Ya, misalnya:
Perhatikan bahwa kami menyertakan mulai di slice, tetapi kami hanya naik, dan tidak termasuk, berhenti.
Ketika langkah ini
None
, secara default slice menggunakan1
untuk langkah tersebut. Jika Anda melangkah dengan bilangan bulat negatif, Python cukup pintar untuk beralih dari akhir ke awal.Saya menjelaskan notasi irisan dengan sangat rinci dalam jawaban saya untuk Menjelaskan irisan notasi Pertanyaan.
sumber
Anda sudah mendapatkannya di sana kecuali "akhir". Ini disebut notasi irisan. Contoh Anda harus membaca:
Jika Anda meninggalkan parameter kedua itu secara implisit adalah akhir dari string.
sumber
Saya ingin menambahkan dua poin ke diskusi:
Anda dapat menggunakan
None
sebagai gantinya di ruang kosong untuk menentukan "dari awal" atau "sampai akhir":Ini sangat membantu dalam fungsi, di mana Anda tidak dapat memberikan ruang kosong sebagai argumen:
Python memiliki objek slice :
sumber
Jika myString berisi nomor rekening yang dimulai pada offset 6 dan memiliki panjang 9, maka Anda dapat mengekstrak nomor rekening cara ini:
acct = myString[6:][:9]
.Jika OP menerima itu, mereka mungkin ingin mencoba, secara eksperimental,
Ini berfungsi - tidak ada kesalahan yang muncul, dan tidak ada 'string padding' standar terjadi.
sumber
myString[offset:][:length]
dalam kasus OP Anda hanya dapat menggunakanmyString[offset:][:]
Mungkin saya melewatkannya, tetapi saya tidak dapat menemukan jawaban lengkap di halaman ini untuk pertanyaan awal karena variabel tidak dibahas lebih lanjut di sini. Jadi saya harus terus mencari.
Karena saya belum diizinkan untuk berkomentar, izinkan saya menambahkan kesimpulan saya di sini. Saya yakin saya bukan satu-satunya yang tertarik ketika mengakses halaman ini:
Jika Anda meninggalkan bagian pertama, Anda dapatkan
Dan jika Anda meninggalkan: di tengah juga Anda mendapatkan substring paling sederhana, yang akan menjadi karakter ke-5 (hitung dimulai dengan 0, jadi kosong dalam kasus ini):
sumber
Yah, saya punya situasi di mana saya perlu menerjemahkan skrip PHP ke Python, dan ada banyak penggunaan
substr(string, beginning, LENGTH)
.Jika saya memilih Python,
string[beginning:end]
saya harus menghitung banyak indeks akhir, jadi cara yang lebih mudah adalah menggunakanstring[beginning:][:length]
, itu menyelamatkan saya dari banyak masalah.sumber
Menggunakan indeks hardcoded itu sendiri bisa berantakan.
Untuk menghindarinya, Python menawarkan objek bawaan
slice()
.Jika kita ingin tahu berapa banyak uang yang tersisa.
Solusi normal:
Menggunakan irisan:
Menggunakan slice Anda mendapatkan keterbacaan.
sumber