Cara menghapus karakter dari string menggunakan Python

457

Ada string, misalnya. EXAMPLE.

Bagaimana saya bisa menghapus karakter tengah, yaitu Mdari itu? Saya tidak butuh kode. Saya ingin tahu:

  • Apakah string dalam Python diakhiri dengan karakter khusus?
  • Mana cara yang lebih baik - menggeser semuanya dari kanan ke kiri mulai dari karakter tengah ATAU pembuatan string baru dan tidak menyalin karakter tengah?
Lazer
sumber

Jawaban:

639

Dalam Python, string tidak dapat diubah, jadi Anda harus membuat string baru. Anda memiliki beberapa opsi cara membuat string baru. Jika Anda ingin menghapus 'M' di mana pun itu muncul:

newstr = oldstr.replace("M", "")

Jika Anda ingin menghapus karakter sentral:

midlen = len(oldstr)/2   # //2 in python 3
newstr = oldstr[:midlen] + oldstr[midlen+1:]

Anda bertanya apakah string diakhiri dengan karakter khusus. Tidak, Anda berpikir seperti seorang programmer C. Dalam Python, string disimpan dengan panjangnya, sehingga nilai byte apa pun, termasuk \0, dapat muncul dalam sebuah string.

Ned Batchelder
sumber
16
Mengingat bahwa penanya adalah merek baru untuk python, mungkin perlu dicatat bahwa sementara di versi 2.X python operator "/" mengembalikan integer (terpotong ke nol), dalam versi 3.X python Anda harus menggunakan "//" sebagai gantinya. Juga, baris from __future__ import divisiondi awal skrip Anda akan membuat versi 2.X python bertindak seperti versi 3.X
Michael Dunn
1
Perhatikan bahwa jika "M" adalah satu-satunya isi baris, "" meninggalkan baris kosong di tempatnya.
8bitjunkie
1
@ 7 Khusus Permata itu sepenuhnya tergantung pada apa yang Anda lakukan dengan string ini. String kosong seperti ""tidak menyiratkan garis kosong. Jika Anda memasukkannya ke dalam daftar, dan bergabung dengan baris baru, maka itu akan membuat garis kosong, tetapi ada banyak tempat lain Anda mungkin menggunakan string kosong yang tidak akan melakukan itu.
Ned Batchelder
68

Ini mungkin cara terbaik:

original = "EXAMPLE"
removed = original.replace("M", "")

Jangan khawatir tentang pengalihan karakter dan semacamnya. Sebagian besar kode Python terjadi pada tingkat abstraksi yang jauh lebih tinggi.

rekursif
sumber
6
Mmungkin tidak unik. Dalam hal ini, ini akan menggantikan semua M, kan?
Lazer
14
Ya itu benar. Jika Anda hanya ingin mengganti nkejadian, gunakan original.replace("M", "", n).
Rekursif
1
@ S.Lott Saya menganggap itu retoris, untuk menyarankan memberikan solusi hanya dengan mengganti satu instance
Dodgie
63

Untuk mengganti posisi tertentu:

s = s[:pos] + s[(pos+1):]

Untuk mengganti karakter tertentu:

s = s.replace('M','')
Eton B.
sumber
18
Meskipun ini mungkin berhasil, saya pikir jawaban Anda dapat ditingkatkan dengan menjelaskan apa yang terjadi di bagian pertama, karena operasi substring tidak selalu mudah dimengerti untuk pemula Python tanpa penjelasan apa pun.
jloubert
Jadi jika panjangnya s l. Kemudian untuk bagian pertama, batasan pos harus l-1 > pos >= 0.
Haoyu Chen
s [: pos] mendapatkan substring dari 0 ke pos-1 dan s [(pos + 1):] mendapat substring dari pos + 1 hingga berakhir. Karenanya, ia menghapus s [pos] dari s.
s.singh
itu tidak menggantikan, itu jatuh. itu baik untuk membedakan operasi dengan memberikan contoh untuk kedua kasus penggunaan utama, dipisahkan oleh metode pemilihan posisi mereka.
Alexander Stohr
28

String tidak berubah. Tapi Anda bisa mengonversinya menjadi daftar, yang bisa berubah-ubah, dan kemudian mengonversi daftar kembali ke string setelah Anda mengubahnya.

s = "this is a string"

l = list(s)  # convert to list

l[1] = ""    # "delete" letter h (the item actually still exists but is empty)
l[1:2] = []  # really delete letter h (the item is actually removed from the list)
del(l[1])    # another way to delete it

p = l.index("a")  # find position of the letter "a"
del(l[p])         # delete it

s = "".join(l)  # convert back to string

Anda juga dapat membuat string baru, seperti yang orang lain tunjukkan, dengan mengambil semuanya kecuali karakter yang Anda inginkan dari string yang ada.

baik hati
sumber
4
Mengapa Anda tidak menggunakan str.replacemetode saja?
alichaudry
12

Bagaimana saya bisa menghapus karakter tengah, yaitu, M dari itu?

Anda tidak bisa, karena string dalam Python tidak dapat diubah .

Apakah string dalam Python diakhiri dengan karakter khusus?

Tidak. Mereka mirip dengan daftar karakter; panjang daftar menentukan panjang string, dan tidak ada karakter yang bertindak sebagai terminator.

Mana cara yang lebih baik - menggeser semuanya dari kanan ke kiri mulai dari karakter tengah ATAU pembuatan string baru dan tidak menyalin karakter tengah?

Anda tidak dapat mengubah string yang ada, jadi Anda harus membuat yang baru yang berisi semuanya kecuali karakter tengah.

Richard Fearn
sumber
11

Gunakan translate()metode:

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
Stefan van den Akker
sumber
3
Metode telah berubah. Lihat dokumen untuk Python 3: translate () Ini menggantikan karakter yang berbeda dengan spasi ( Noneuntuk menghapus tampaknya tidak berfungsi):translate( str.maketrans("<>", " ") )
menangani
1
Sebenarnya, dokumen menentukan dua cara untuk menghapus karakter yang berbeda dengan translate () dalam Python 3,: str.maketrans( "", "", "<>")danstr.maketrans( {"<":None,">":None })
handle
3
Setara dengan kode dalam jawaban menjadi ini di python3:'EXAMPLE'.translate({ord("M"): None})
yoniLavi
7

UserString.MutableString

Cara bisa berubah:

import UserString

s = UserString.MutableString("EXAMPLE")

>>> type(s)
<type 'str'>

# Delete 'M'
del s[3]

# Turn it for immutable:
s = str(s)
killown
sumber
3
404 situs web no import
somethingSomething
6
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

Cara menghapus satu karakter dari string: Berikut adalah contoh di mana ada tumpukan kartu yang direpresentasikan sebagai karakter dalam string. Salah satunya ditarik (impor modul acak untuk fungsi random.choice (), yang mengambil karakter acak dalam string). String baru, cardsLeft, dibuat untuk menahan kartu yang tersisa yang diberikan oleh fungsi string replace () di mana parameter terakhir menunjukkan bahwa hanya satu "kartu" yang harus diganti oleh string kosong ...

StaffanRolfsson
sumber
6
def kill_char(string, n): # n = position of which character you want to remove
    begin = string[:n]    # from beginning to n (n not included)
    end = string[n+1:]    # n+1 through end of string
    return begin + end
print kill_char("EXAMPLE", 3)  # "M" removed

Saya pernah melihat ini di suatu tempat di sini .

pengguna1443297
sumber
4

Inilah yang saya lakukan untuk memotong "M":

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
PaulM
sumber
2
Ini hanya akan bekerja string spesifik ini dan bukan solusi umum.
Andreas Bergström
3

Jika Anda ingin menghapus / mengabaikan karakter dalam sebuah string, dan, misalnya, Anda memiliki string ini,

"[11: L: 0]"

dari respons API web atau sesuatu seperti itu, seperti file CSV, katakanlah Anda menggunakan permintaan

import requests
udid = 123456
url = 'http://webservices.yourserver.com/action/id-' + udid
s = requests.Session()
s.verify = False
resp = s.get(url, stream=True)
content = resp.content

lingkaran dan singkirkan karakter yang tidak diinginkan:

for line in resp.iter_lines():
  line = line.replace("[", "")
  line = line.replace("]", "")
  line = line.replace('"', "")

Pemisahan opsional, dan Anda akan dapat membaca nilai secara individual:

listofvalues = line.split(':')

Sekarang mengakses setiap nilai lebih mudah:

print listofvalues[0]
print listofvalues[1]
print listofvalues[2]

Ini akan dicetak

11

L.

0

d1jhoni1b
sumber
3

Untuk menghapus a charatau sub-string sekali (hanya kejadian pertama):

main_string = main_string.replace(sub_str, replace_with, 1)

CATATAN: Di sini 1dapat diganti dengan apa pun intuntuk jumlah kejadian yang ingin Anda ganti.

BlackBeard
sumber
3

Anda cukup menggunakan pemahaman daftar.

Asumsikan bahwa Anda memiliki string: my name isdan Anda ingin menghapus karakter m. gunakan kode berikut:

"".join([x for x in "my name is" if x is not 'm'])
Hubert
sumber
0
from random import randint


def shuffle_word(word):
    newWord=""
    for i in range(0,len(word)):
        pos=randint(0,len(word)-1)
        newWord += word[pos]
        word = word[:pos]+word[pos+1:]
    return newWord

word = "Sarajevo"
print(shuffle_word(word))
Fahrudin Halilović
sumber
2
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
Andreas
0

Cara lain adalah dengan suatu fungsi,

Di bawah ini adalah cara untuk menghapus semua vokal dari sebuah string, hanya dengan memanggil fungsinya

def disemvowel(s):
    return s.translate(None, "aeiouAEIOU")
Kyoujin
sumber
-7

String tidak berubah dalam Python sehingga kedua opsi Anda memiliki arti yang sama pada dasarnya.

Skilldrick
sumber