Bagaimana cara mendapatkan substring dari sebuah string di Python?

Apakah ada cara untuk substring string di Python, untuk mendapatkan string baru dari karakter ketiga untuk akhir string?

Mungkin seperti myString[2:end]?

Jika meninggalkan bagian kedua sarana 'sampai akhir', dan jika anda meninggalkan bagian pertama, apakah mulai dari awal?

Mengomentari pertanyaan (1)
Larutan
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'

Python panggilan konsep ini "mengiris" dan itu bekerja pada lebih dari hanya string. Lihat di sini untuk pengenalan yang komprehensif.

Komentar (0)

Hanya untuk kelengkapan seperti tidak ada orang lain telah disebutkan itu. Ketiga parameter array slice adalah langkah. Begitu membalikkan string adalah yang sederhana seperti:

some_string[::-1]

Atau memilih karakter alternatif akan sama:

"H-e-l-l-o- -W-o-r-l-d"[::2] # outputs "Hello World"

Kemampuan untuk langkah ke depan dan ke belakang melalui string mempertahankan konsistensi dengan mampu array slice dari awal atau akhir.

Komentar (3)

Substr() normal (yaitu PHP dan Perl) bekerja dengan cara ini:

s = Substr(s, beginning, LENGTH)

Jadi parameter adalah awal dan PANJANG.

Tapi Python's perilaku yang berbeda; ia mengharapkan awal dan AKHIR (!). Ini adalah sulit untuk spot oleh para pemula. Jadi pengganti yang tepat untuk Substr(s, awal, PANJANG)

s = s[ beginning : beginning + LENGTH]
Komentar (4)

Cara yang umum untuk mencapai hal ini adalah dengan string mengiris.

MyString[a:b] memberikan anda sebuah substring dari indeks a untuk (b - 1).

Komentar (0)

Salah satu contoh yang tampaknya hilang di sini: penuh (dangkal) copy.

>>> x = "Hello World!"
>>> x
'Hello World!'
>>> x[:]
'Hello World!'
>>> x==x[:]
True
>>>

Ini adalah ungkapan umum untuk membuat salinan dari urutan jenis (bukan magang string), [:]. Dangkal salinan daftar, lihat Python daftar iris sintaks yang digunakan untuk tanpa alasan yang jelas.

Komentar (5)

ada cara untuk substring string di Python, untuk mendapatkan string baru dari 3 karakter ke akhir dari string?

Mungkin seperti myString[2:end]?

Ya, ini benar-benar bekerja jika anda menetapkan, atau mengikat, nama,end, untuk konstan singleton, None:

>>> end = None
>>> myString = '1234567890'
>>> myString[2:end]
'34567890'

Iris notasi memiliki 3 argumen penting:

  • mulai
  • berhenti
  • langkah

Default mereka ketika tidak diberikan None - tapi kami bisa melewati mereka secara eksplisit:

>>> stop = step = None
>>> start = 2
>>> myString[start:stop:step]
'34567890'

Jika meninggalkan bagian kedua sarana 'sampai akhir', jika anda meninggalkan bagian pertama, apakah mulai dari awal?

Ya, misalnya:

>>> start = None
>>> stop = 2
>>> myString[start:stop:step]
'12'

Perhatikan bahwa kita termasuk mulai di potong, tapi kita hanya pergi ke, dan tidak termasuk, berhenti.

Ketika langkah adalah Tidak, secara default menggunakan slice 1 untuk satu langkah. Jika anda melangkah dengan sebuah bilangan bulat negatif, Python adalah cukup pintar untuk pergi dari akhir ke awal.

>>> myString[::-1]
'0987654321'

Saya menjelaskan iris notasi secara detail di jawaban saya untuk Menjelaskan iris notasi Pertanyaan.

Komentar (0)

Anda've got it di sana kecuali untuk "akhir". It's disebut slice notasi. Misalnya anda harus baca:

new_sub_string = myString[2:]

Jika anda meninggalkan kedua parameter ini secara implisit akhir string.

Komentar (0)

Saya ingin menambahkan dua poin pembahasan:

  1. Anda dapat menggunakan None, bukan pada ruang kosong untuk menentukan "mulai" atau "akhir":

'abcde'[2:Tidak ada] == 'abcde'[2:] == 'cde'

Hal ini sangat membantu dalam fungsi, di mana anda dapat't memberikan ruang kosong sebagai argumen:

def substring(s, awal, akhir): """Hapus start karakter dari awal dan end karakter dari akhir string s.

Contoh

substring('abcde', 0, 3) 'abc' substring('abcde', 1, Tidak ada) 'bcde' """ kembali s[awal:akhir]

  1. Python memiliki iris benda:

idx = slice(2, Tidak ada) 'abcde'[idx] == 'abcde'[2:] == 'cde'

Komentar (0)

Mungkin aku merindukannya, tapi aku tidak't menemukan jawaban yang lengkap pada halaman ini ke pertanyaan awal(s) karena variabel tersebut tidak dibahas lebih lanjut di sini. Jadi aku harus pergi pada pencarian.

Karena saya'm belum diizinkan untuk komentar, izinkan saya menambahkan kesimpulan saya di sini. I'm yakin aku bukan satu-satunya yang tertarik di dalamnya ketika mengakses halaman ini:

 >>>myString = 'Hello World'
 >>>end = 5

 >>>myString[2:end]
 'llo'

Jika anda meninggalkan bagian pertama, anda mendapatkan

 >>>myString[:end]
 'Hello' 

Dan jika anda meninggalkan : di tengah juga anda punya yang paling sederhana substring, yang akan menjadi yang ke-5 karakter (count dimulai dengan 0, sehingga's kosong dalam kasus ini):

 >>>myString[end]
 ' '
Komentar (0)

Jika myString berisi nomor rekening yang dimulai pada offset 6 dan memiliki panjang 9, maka anda dapat mengekstrak nomor rekening dengan cara ini: acct = myString[6:][:9].

Jika OP menerima bahwa, mereka mungkin ingin mencoba, dalam eksperimental,

myString[2:][:999999]

Bekerja - tidak ada kesalahan yang diangkat, dan tidak ada default 'string padding' terjadi.

Komentar (3)

Menggunakan hardcoded indeks itu sendiri dapat menjadi berantakan.

Dalam rangka untuk menghindari itu, Python menawarkan built-in objek slice().

string = "my company has 1000$ on profit, but I lost 500$ gambling."

Jika kita ingin tahu berapa banyak uang yang aku punya.

Normal solusi:

final = int(string[15:19]) - int(string[43:46])
print(final)
>>>500

Menggunakan irisan:

EARNINGS = slice(15, 19)
LOSSES = slice(43, 46)
final = int(string[EARNINGS]) - int(string[LOSSES])
print(final)
>>>500

Menggunakan slice anda mendapatkan mudah dibaca.

Komentar (1)