Hướng dẫn how to remove last occurrence of character from list in python - cách xóa lần xuất hiện cuối cùng của ký tự khỏi danh sách trong python

Thực sự không có gì sai với mã của bạn cả. Nó hoạt động, rõ ràng lý do tại sao nó hoạt động, thật khó để hiểu sai hoặc hiểu lầm.

Vâng, bạn có thể làm cho nó nhanh hơn, nhưng chỉ bởi một yếu tố không đổi. . Cũng sẽ là

In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop
0.] Và với chi phí làm cho nó phức tạp hơn.

Cách rõ ràng có lẽ nhanh hơn để làm điều đó là chỉ lặp bằng tay từ cuối cho đến khi chúng ta tìm thấy một giá trị, sau đó xóa giá trị đó. Điều đó cũng tránh phải đối phó với

In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop
2. Sử dụng
In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop
3 có thể giúp đỡ nhưng làm cho nó đúng [mà không sao chép toàn bộ] có thể rất khó khăn.

Vì vậy, hãy so sánh những thứ này với mã hiện tại của bạn, cả hai đã gói nó trong ____ 14/________ 15 và trong một

In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop
6:

def f_rev_ex[xs, s]:
    xs.reverse[]
    try:
        xs.remove[s]
    except ValueError:
        pass
    xs.reverse[]

def f_rev_if[xs, s]:
    if s in xs:
        xs.reverse[]
        xs.remove[s]
        xs.reverse[]

def f_for[xs, s]:
    for i in range[len[xs]-1, -1, -1]:
        if s == xs[i]:
            del xs[i]
            break

def f_enum[xs, s]:
    for i, x in reversed[list[enumerate[xs]]]:
        if x == s:
            del xs[i]
            break

Đối với một danh sách nhỏ như của bạn, bài kiểm tra thậm chí không đáng để chạy, vì vậy tôi đã phát minh ra dữ liệu ngẫu nhiên của riêng mình [trong cuộc sống thực, tất nhiên là bạn phải biết dữ liệu của mình]:

In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop

Chà, cái cuối cùng đó không phải là một ý tưởng rất hay, nhưng cái còn lại nhanh hơn khoảng 25% so với những gì chúng tôi bắt đầu. Vì vậy, chúng tôi đã lưu toàn bộ 9 micro giây, trên dữ liệu 4 đơn đặt hàng lớn hơn dữ liệu thực tế của bạn. Tùy thuộc vào bạn liệu điều đó có xứng đáng với mã không thể đọc được, dễ bị ảnh hưởng hơn hay không. .

Trong hướng dẫn này, chúng tôi sẽ xem xét cách loại bỏ sự xuất hiện cuối cùng của một ký tự khỏi một chuỗi trong Python với sự trợ giúp của một số ví dụ.

Làm thế nào để loại bỏ thể hiện cuối cùng của một ký tự trong một chuỗi?

Chuỗi là bất biến trong Python. Đó là, chúng không thể được sửa đổi sau khi chúng được tạo ra. Tuy nhiên, bạn có thể tạo một bản sao của chuỗi gốc với lần xuất hiện cuối cùng của ký tự.

Sử dụng các bước sau -

  1. Tìm chỉ số của sự xuất hiện cuối cùng của ký tự trong chuỗi.
    • Đối với điều này, trước tiên, đảo ngược chuỗi và tìm chỉ mục đầu tiên của ký tự trong chuỗi đảo ngược.
    • Sau đó, trừ chỉ mục này và một từ độ dài của chuỗi để lấy chỉ mục cuối cùng của ký tự trong chuỗi gốc.
  2. Sau đó, sử dụng chỉ mục trên để cắt chuỗi ban đầu sao cho ký tự ở chỉ mục đó bị bỏ qua.

Hãy nhìn vào một ví dụ -

# create a string
s = "not me, not her"
# get index of last occurrence of 'n'
rev_s = s[::-1]
i = len[s] - rev_s.index['n'] - 1
# remove the character at index i in s
print[s[:i]+s[i+1:]]

Output:

not me, ot her

Bạn có thể thấy rằng chuỗi đầu ra không chứa sự xuất hiện cuối cùng của ký tự ’n, từ chuỗi gốc. Ngoài ra, lưu ý rằng các lần xuất hiện khác của nhân vật ’n, trong chuỗi không bị ảnh hưởng.

Để biết thêm về hàm Python String Index [], hãy tham khảo tài liệu của nó.

Sử dụng một vòng lặp để xóa sự xuất hiện cuối cùng của ký tự trong chuỗi

Ngoài ra, bạn cũng có thể sử dụng một vòng lặp để lặp lại thông qua các ký tự của chuỗi gốc từ bên phải và loại bỏ sự xuất hiện cuối cùng của một ký tự khỏi một chuỗi trong Python. Sử dụng các bước sau -

  1. Tạo một chuỗi trống để lưu trữ kết quả của chúng tôi và một lá cờ được đặt thành
    In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
    In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
    10000 loops, best of 3: 34.7 µs per loop
    In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
    10000 loops, best of 3: 35.1 µs per loop
    In [61]: %timeit y = x[:]; f_for[y, 'a']
    10000 loops, best of 3: 26.6 µs per loop
    In [62]: %timeit y = x[:]; f_enum[y, 'a']
    1000 loops, best of 3: 604 µs per loop
    
    8 để xác định xem chúng tôi có gặp phải ký tự mà chúng tôi muốn xóa hay không.
  2. Lặp qua mỗi ký tự trong chuỗi từ bên phải.
  3. Đối với mỗi ký tự, hãy kiểm tra xem nó có bằng với ký tự mà chúng tôi muốn xóa không và liệu cờ có phải là
    In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
    In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
    10000 loops, best of 3: 34.7 µs per loop
    In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
    10000 loops, best of 3: 35.1 µs per loop
    In [61]: %timeit y = x[:]; f_for[y, 'a']
    10000 loops, best of 3: 26.6 µs per loop
    In [62]: %timeit y = x[:]; f_enum[y, 'a']
    1000 loops, best of 3: 604 µs per loop
    
    8 không. Nếu cả hai điều kiện là đúng, hãy đặt cờ thành
    # create a string
    s = "not me, not her"
    # get index of last occurrence of 'n'
    rev_s = s[::-1]
    i = len[s] - rev_s.index['n'] - 1
    # remove the character at index i in s
    print[s[:i]+s[i+1:]]
    0 và bỏ qua lần lặp tiếp theo. Khác, thêm ký tự vào chuỗi kết quả của chúng tôi.
  4. Đảo ngược chuỗi kết quả để lấy chuỗi ban đầu của chúng tôi với phiên bản cuối cùng của ký tự bị xóa.

Hãy nhìn vào một ví dụ -

# create a string
s = "not me, not her"

result = ""
ch_to_remove = 'n'
occurred_flag = False

# iterate over each character in s from right
for ch in s[::-1]:
    if ch == ch_to_remove and occurred_flag == False:
        occurred_flag = True
        continue
    else:
        result += ch

# reverse the result
result = result[::-1]
# display the resulting string
print[result]

Output:

not me, ot her

Bạn có thể thấy rằng chuỗi đầu ra không chứa sự xuất hiện cuối cùng của ký tự ’n, từ chuỗi gốc. Ngoài ra, lưu ý rằng các lần xuất hiện khác của nhân vật ’n, trong chuỗi không bị ảnh hưởng.

Để biết thêm về hàm Python String Index [], hãy tham khảo tài liệu của nó.

  • Sử dụng một vòng lặp để xóa sự xuất hiện cuối cùng của ký tự trong chuỗi
  • Ngoài ra, bạn cũng có thể sử dụng một vòng lặp để lặp lại thông qua các ký tự của chuỗi gốc từ bên phải và loại bỏ sự xuất hiện cuối cùng của một ký tự khỏi một chuỗi trong Python. Sử dụng các bước sau -
  • Tạo một chuỗi trống để lưu trữ kết quả của chúng tôi và một lá cờ được đặt thành
    In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
    In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
    10000 loops, best of 3: 34.7 µs per loop
    In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
    10000 loops, best of 3: 35.1 µs per loop
    In [61]: %timeit y = x[:]; f_for[y, 'a']
    10000 loops, best of 3: 26.6 µs per loop
    In [62]: %timeit y = x[:]; f_enum[y, 'a']
    1000 loops, best of 3: 604 µs per loop
    
    8 để xác định xem chúng tôi có gặp phải ký tự mà chúng tôi muốn xóa hay không.
  • Lặp qua mỗi ký tự trong chuỗi từ bên phải.


Đối với mỗi ký tự, hãy kiểm tra xem nó có bằng với ký tự mà chúng tôi muốn xóa không và liệu cờ có phải là

In [58]: xs = [random.choice[string.ascii_lowercase] for _ in range[10000]]
In [59]: %timeit y = x[:]; f_rev_ex[y, 'a']
10000 loops, best of 3: 34.7 µs per loop
In [60]: %timeit y = x[:]; f_rev_if[y, 'a']
10000 loops, best of 3: 35.1 µs per loop
In [61]: %timeit y = x[:]; f_for[y, 'a']
10000 loops, best of 3: 26.6 µs per loop
In [62]: %timeit y = x[:]; f_enum[y, 'a']
1000 loops, best of 3: 604 µs per loop
8 không. Nếu cả hai điều kiện là đúng, hãy đặt cờ thành
# create a string
s = "not me, not her"
# get index of last occurrence of 'n'
rev_s = s[::-1]
i = len[s] - rev_s.index['n'] - 1
# remove the character at index i in s
print[s[:i]+s[i+1:]]
0 và bỏ qua lần lặp tiếp theo. Khác, thêm ký tự vào chuỗi kết quả của chúng tôi.

We do not spam and you can opt out any time.

  • Đảo ngược chuỗi kết quả để lấy chuỗi ban đầu của chúng tôi với phiên bản cuối cùng của ký tự bị xóa.

    Chúng tôi nhận được kết quả tương tự như trên. Chuỗi kết quả có thể loại bỏ ký tự cuối cùng. Lưu ý rằng phương pháp này quá dài so với phương pháp trước đó.

Làm thế nào để bạn loại bỏ sự xuất hiện cuối cùng của một phần tử trong danh sách Python?

Xóa phần tử cuối cùng khỏi danh sách Python..
Sử dụng danh sách. chức năng pop []. ....
Sử dụng cắt lát. Chúng tôi biết rằng các danh sách có thể được cắt lát trong Python. ....
Sử dụng câu lệnh DEL. Một cách khác để xóa một phần tử khỏi danh sách bằng chỉ mục của nó là câu lệnh DEL ..

Làm thế nào để bạn loại bỏ tất cả các lần xuất hiện của một nhân vật khỏi một danh sách trong Python?

Sử dụng Filter [] và __ne__Sing Remove [] Using remove[]

Làm cách nào để loại bỏ sự xuất hiện cuối cùng của một ký tự khỏi một chuỗi trong Python?

rstrip.Phương thức chuỗi Rstrip loại bỏ các ký tự khỏi phía bên phải của chuỗi được cung cấp cho nó.Vì vậy, chúng ta có thể sử dụng nó để loại bỏ phần tử cuối cùng của chuỗi.Chúng tôi không phải viết nhiều hơn một dòng mã để xóa char cuối cùng khỏi chuỗi.The string method rstrip removes the characters from the right side of the string that is given to it. So, we can use it to remove the last element of the string. We don't have to write more than a line of code to remove the last char from the string.

Làm thế nào để bạn tìm thấy sự xuất hiện cuối cùng của một nhân vật trong một danh sách trong Python?

Hãy xem làm thế nào để tìm thấy sự xuất hiện cuối cùng của một phần tử bằng cách đảo ngược danh sách đã cho ...
Khởi tạo danh sách ..
Đảo ngược danh sách bằng phương pháp đảo ngược ..
Tìm chỉ mục của phần tử bằng phương thức chỉ mục ..
Chỉ số thực tế của phần tử là LEN [Danh sách] - INDEX - 1 ..
In chỉ số cuối cùng ..

Bài Viết Liên Quan

Chủ Đề