370

Có một chuỗi, ví dụ. EXAMPLE.

Làm thế nào tôi có thể loại bỏ ký tự giữa, tức là, Mtừ nó? Tôi không cần mã. Tôi muốn biết:

  • Các chuỗi trong Python kết thúc bằng ký tự đặc biệt nào?
  • Cách nào tốt hơn - chuyển mọi thứ từ phải sang trái bắt đầu từ ký tự giữa HOẶC tạo một chuỗi mới và không sao chép ký tự giữa?
|
534

Trong Python, các chuỗi là bất biến, vì vậy bạn phải tạo một chuỗi mới. Bạn có một vài tùy chọn về cách tạo chuỗi mới. Nếu bạn muốn xóa 'M' bất cứ nơi nào nó xuất hiện:

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

Nếu bạn muốn loại bỏ nhân vật trung tâm:

midlen = len(oldstr)/2
newstr = oldstr[:midlen] + oldstr[midlen+1:]

Bạn hỏi nếu chuỗi kết thúc bằng một ký tự đặc biệt. Không, bạn đang suy nghĩ như một lập trình viên C. Trong Python, các chuỗi được lưu trữ với độ dài của chúng, vì vậy mọi giá trị byte, bao gồm \0, có thể xuất hiện trong một chuỗi.

|
  • 1

    Cho rằng người hỏi là hoàn toàn mới đối với python, có thể đáng chú ý rằng trong phiên bản 2.X python, toán tử "/" trả về một số nguyên (bị cắt về 0), trong phiên bản 3.X python bạn nên sử dụng "//" thay thế. Ngoài ra, dòng from __future__ import divisionở đầu tập lệnh của bạn sẽ khiến phiên bản 2.X python hoạt động giống như phiên bản 3.X

    – Trịnh Ðình Chiểu 20:29:18 24/08/2010
  • 1

    Lưu ý rằng nếu "M" là nội dung duy nhất của dòng, "" để lại một dòng trống ở vị trí của nó.

    – Tạ Giáng My 22:50:46 13/08/2015
  • 1

    @ 7 Đặc biệt, nó phụ thuộc hoàn toàn vào những gì bạn làm với chuỗi này. Một chuỗi rỗng như ""không ngụ ý một dòng trống. Nếu bạn đưa nó vào một danh sách và tham gia nó với các dòng mới, thì nó sẽ tạo một dòng trống, nhưng có rất nhiều nơi khác bạn có thể sử dụng một chuỗi trống sẽ không làm điều đó.

    – Hoàng Trọng Hà 10:06:16 14/08/2015
59

Đây có lẽ là cách tốt nhất:

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

Đừng lo lắng về việc thay đổi nhân vật và như vậy. Hầu hết mã Python diễn ra ở mức độ trừu tượng cao hơn nhiều.

|
55

Để thay thế một vị trí cụ thể:

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

Để thay thế một ký tự cụ thể:

s = s.replace('M','')
|
  • 1

    Mặc dù điều này có thể hoạt động, tôi nghĩ rằng câu trả lời của bạn có thể được cải thiện bằng cách giải thích những gì đang diễn ra trong phần đầu tiên, vì các thao tác chuỗi con không nhất thiết phải dễ hiểu đối với người mới sử dụng Python mà không có bất kỳ lời giải thích nào.

    – Trịnh Ðình Chiểu 19:44:06 24/08/2010
  • 1

    Vậy nếu độ dài của s là l. Sau đó, đối với phần đầu tiên, các ràng buộc cho pos nên được l-1 > pos >= 0.

    – Tạ Giáng My 17:28:27 11/04/2015
24

Dây là bất biến. Nhưng bạn có thể chuyển đổi chúng thành một danh sách, có thể thay đổi và sau đó chuyển đổi danh sách thành chuỗi sau khi bạn thay đổi.

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

Bạn cũng có thể tạo một chuỗi mới, như những người khác đã thể hiện, bằng cách lấy mọi thứ trừ ký tự bạn muốn từ chuỗi hiện có.

|
12

Làm thế nào tôi có thể loại bỏ ký tự giữa, tức là M khỏi nó?

Bạn không thể, bởi vì các chuỗi trong Python là bất biến .

Các chuỗi trong Python kết thúc bằng ký tự đặc biệt nào?

Không. Chúng tương tự như danh sách các ký tự; độ dài của danh sách xác định độ dài của chuỗi và không có ký tự nào đóng vai trò là dấu kết thúc.

Cách nào tốt hơn - chuyển mọi thứ từ phải sang trái bắt đầu từ ký tự giữa HOẶC tạo một chuỗi mới và không sao chép ký tự giữa?

Bạn không thể sửa đổi chuỗi hiện có, vì vậy bạn phải tạo một chuỗi mới chứa mọi thứ trừ ký tự giữa.

|
11

Sử dụng translate()phương pháp:

>>> s = 'EXAMPLE'
>>> s.translate(None, 'M')
'EXAPLE'
|
  • 1

    Phương pháp đã thay đổi. Xem tài liệu cho Python 3: translate () Điều này thay thế các ký tự khác nhau bằng khoảng trắng ( Noneđể loại bỏ dường như không hoạt động):translate( str.maketrans("<>", " ") )

    – Trịnh Ðình Chiểu 07:04:25 20/05/2014
  • 1

    Trên thực tế, các tài liệu chỉ định hai cách để loại bỏ các ký tự khác nhau bằng dịch () trong Python 3 ,: str.maketrans( "", "", "<>")str.maketrans( {"<":None,">":None })

    – Tạ Giáng My 07:40:12 20/05/2014
  • 1

    Mã tương đương trong câu trả lời đã trở thành mã này trong python3:'EXAMPLE'.translate({ord("M"): None})

    – Hoàng Trọng Hà 18:29:43 09/12/2015
7

UserString.MutableString

Cách đột biến:

import UserString

s = UserString.MutableString("EXAMPLE")

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

# Delete 'M'
del s[3]

# Turn it for immutable:
s = str(s)
|
6
card = random.choice(cards)
cardsLeft = cards.replace(card, '', 1)

Cách xóa một ký tự khỏi chuỗi: Dưới đây là một ví dụ trong đó có một chồng thẻ được biểu thị dưới dạng các ký tự trong chuỗi. Một trong số chúng được vẽ (nhập mô-đun ngẫu nhiên cho hàm Random.choice (), chọn một ký tự ngẫu nhiên trong chuỗi). Một chuỗi mới, cardLeft, được tạo để giữ các thẻ còn lại được cung cấp bởi hàm chuỗi thay thế () trong đó tham số cuối cùng chỉ ra rằng chỉ có một "thẻ" được thay thế bằng chuỗi trống ...

|
5
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

Tôi đã thấy điều này ở đâu đó ở đây .

|
4

Đây là những gì tôi đã làm để cắt ra chữ "M":

s = 'EXAMPLE'
s1 = s[:s.index('M')] + s[s.index('M')+1:]
|
3

Nếu bạn muốn xóa / bỏ qua các ký tự trong một chuỗi và, ví dụ, bạn có chuỗi này,

"[11: L: 0]"

từ phản hồi API web hoặc một cái gì đó tương tự, như tệp CSV, giả sử bạn đang sử dụng các yêu cầu

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

lặp và loại bỏ các ký tự không mong muốn:

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

Phân chia tùy chọn và bạn sẽ có thể đọc các giá trị riêng lẻ:

listofvalues = line.split(':')

Bây giờ truy cập từng giá trị dễ dàng hơn:

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

Cái này sẽ in

11

L

0

|
0

Bạn chỉ có thể sử dụng hiểu danh sách.

Giả sử rằng bạn có chuỗi: my name isvà bạn muốn xóa ký tự m. sử dụng mã sau đây:

"".join([x for x in "my name is" if x is not 'm'])
|
0

Để xóa một charhoặc một sub-string lần (chỉ lần xuất hiện đầu tiên):

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

LƯU Ý: Ở đây 1có thể được thay thế bằng bất kỳ intsố lần xuất hiện bạn muốn thay thế.

|
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))
|
  • 1

    Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.

    – Tạ Minh Huy 22:41:03 17/10/2016

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.