4
Python - Làm thế nào để tìm chuỗi con trong danh sách các chuỗi?
0
Hán Giang20 đã đăng:

Mình đang xây dựng một hàm tìm kiếm sử dụng ngôn ngữ Python.

Giả sử dữ liệu mình có một list các chuỗi bao gồm các từ như sau:

a = ['abc-2000', 'bdf-1996', 'abc-2001', 'abc-1998', 'bdf-2017', 'lop-2017']

Bây giờ mình muốn tìm tất cả các từ có ký tự con là abc thì làm sao ạ?

Kết quả mình mong muốn:

Tìm abc, kết quả: ['abc-2000', 'abc-2001', 'abc-1998']

Tìm bdf, kết quả: ['bdf-1996', 'bdf-2017']

Tìm 2017, kết quả: ['bdf-2017','lop-2017']

Any help...

thêm bình luận...
3
Việt Khôi30 đã đăng:

Nếu bạn biết List comprehension, giải quyết bài toán chỉ cần 1 dòng mã nguồn,

a = ['abc-2000', 'bdf-1996', 'abc-2001', 'abc-1998', 'bdf-2017', 'lop-2017']
result = [s for s in a if 'abc' in s]
# result = ['abc-2000', 'abc-2001', 'abc-1998']
đã bổ sung 5.6 năm trước bởi
thêm bình luận...
2
trihuu39890220 đã đăng:

Rất đơn giản, sử dụng vòng lặp for và toán tử in:

  • Vòng lặp for để duyệt qua từng phần tử của mảng a.
  • Tại mỗi phần tử, sử dụng toán tử in của Python để xét xem chuỗi bạn cần tìm có nằm trong phần tử đó hay không.
  • Nếu có thì lưu lại phần tử đó, không thì duyệt tiếp.

Đoạn code như sau:

# -*- coding: utf-8 -*-

a = ['abc-2000', 'bdf-1996', 'abc-2001', 'abc-1998', 'bdf-2017', 'lop-2017']

result = []    # Khởi tạo một mảng chứa kết quả cần tìm
sub_str = 'abc'    # Là chuỗi con bạn cần tìm, ví dụ 'abc'
for s in a:    # Duyệt từng phần tử trong mảng
    if sub_str in s:    # Xét xem chuỗi có nằm trong phần tử này hay không?
        result.append(s)    # Lưu lại phần tử đó nếu có.

print result    # ['abc-2000', 'abc-2001', 'abc-1998']
đã bổ sung 5.6 năm trước bởi

À, mình newbie nên không biết toán tử in trong Python còn được dùng để tìm kiếm. Không biết tìm kiếm bằng toán tử in có nhanh không bạn nhỉ?

Hán Giang 10.08.2018

Ý bạn là độ phức tạp thuật toán, theo như mình biết thì toán tử in hoạt động phụ thuộc vào từng loại đối tượng cụ thể, nếu đối tượng là list, str thì độ phức tạp O(n), nếu đối tượng là dict, set thì độ phức tạp O(1).

trihuu398902 10.08.2018

Thanks bạn.

Hán Giang 10.08.2018

@trihuu398902, str là từ khóa chỉ kiểu dữ liệu string trong Python, bạn không nên sử dụng từ khoá str trong vai trò là một biến ở câu lệnh,

for str in a:
    ....

Nó sẽ rất phân vân, bạn nên đặt lại thành,

for something in a:
    ....
Việt Khôi 10.08.2018

[Đã cập nhật] - Cảm ơn bạn @Việt Khôi.

trihuu398902 10.08.2018
thêm bình luận...
1
I'm not yours30 đã đăng:

Còn phương thức find() của đối tượng string thì sao, có thể sử dụng để thay thế từ khóa in, str.find() trả về vị trí ký tự bắt đầu của chuỗi con nếu được tìm thấy và trả về -1 nếu không được tìm thấy,

a = ['abc-2000', 'bdf-1996', 'abc-2001', 'abc-1998', 'bdf-2017', 'lop-2017']
result = []
for ss in a:
    if ss.find('abc') != -1:
        result.append(ss)

print result

Kết quả tương tự như trên.

thêm bình luận...
0
Cộng đồng đã đăng:

Chúng ta dùng phương thức find() để tìm chuỗi con trong danh sách các chuỗi python. Bạn cũng có thể kết hợp list comprehension trong python để viết code gọn hơn. Ví dụ:

a = ['abc-2000', 'bdf-1996', 'abc-2001', 'abc-1998', 'bdf-2017', 'lop-2017']
print ([value for value in a if value.find('abc') != -1])

Link tham khảo:

  1. Sử dụng list comprehension trong Python | Lập trình căn bản - học lập trình theo phong cách Nhật Bản!

  2. Tìm ký tự trong chuỗi python | Lập trình căn bản - học lập trình theo phong cách Nhật Bản!

thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)