Hướng dẫn python check if any element in list is in string - python kiểm tra xem có phần tử nào trong danh sách nằm trong chuỗi không

Tôi có một cái gì đó như thế này:

extensionsToCheck = ['.pdf', '.doc', '.xls']

for extension in extensionsToCheck:
    if extension in url_string:
        print[url_string]

Tôi đang tự hỏi điều gì sẽ là cách thanh lịch hơn để làm điều này trong Python [mà không sử dụng vòng lặp for]? Tôi đã nghĩ về một cái gì đó như thế này [như từ C/C ++], nhưng nó không hoạt động:

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]

EDIT: Tôi hơi buộc phải giải thích điều này khác với câu hỏi dưới đây được đánh dấu là trùng lặp tiềm năng [vì vậy tôi không bị đóng cửa].

Sự khác biệt là, tôi muốn kiểm tra xem một chuỗi là một phần của một số danh sách các chuỗi trong khi câu hỏi khác là kiểm tra xem một chuỗi từ danh sách các chuỗi có phải là phần phụ của chuỗi khác hay không. Tương tự, nhưng không hoàn toàn giống nhau và vấn đề ngữ nghĩa khi bạn đang tìm kiếm một câu trả lời trực tuyến IMHO. Hai câu hỏi này thực sự đang tìm cách giải quyết vấn đề ngược lại của nhau. Giải pháp cho cả hai hóa ra là giống nhau mặc dù.

Đã hỏi ngày 30 tháng 6 năm 2011 lúc 7:41Jun 30, 2011 at 7:41

Tkittkittkit

7.5616 Huy hiệu vàng40 Huy hiệu bạc69 Huy hiệu đồng6 gold badges40 silver badges69 bronze badges

2

Sử dụng trình tạo cùng với

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
0, điều trị ngắn gọn trong lần thực sự đầu tiên:

if any[ext in url_string for ext in extensionsToCheck]:
    print[url_string]

Chỉnh sửa: Tôi thấy câu trả lời này đã được OP chấp nhận. Mặc dù giải pháp của tôi có thể là giải pháp "đủ tốt" cho vấn đề cụ thể của anh ấy và là một cách chung chung để kiểm tra xem có bất kỳ chuỗi nào trong danh sách được tìm thấy trong một chuỗi khác, hãy nhớ rằng đây là tất cả những gì giải pháp này. Nó không quan tâm đến nơi chuỗi được tìm thấy, ví dụ: Trong phần kết thúc của chuỗi. Nếu điều này là quan trọng, như thường thấy với các URL, bạn nên tìm đến câu trả lời của @Wladimir Palant hoặc bạn có nguy cơ bị dương tính sai. I see this answer has been accepted by OP. Though my solution may be "good enough" solution to his particular problem, and is a good general way to check if any strings in a list are found in another string, keep in mind that this is all that this solution does. It does not care WHERE the string is found e.g. in the ending of the string. If this is important, as is often the case with urls, you should look to the answer of @Wladimir Palant, or you risk getting false positives.

Nam G Vu

31.9K67 Huy hiệu vàng225 Huy hiệu bạc358 Huy hiệu Đồng67 gold badges225 silver badges358 bronze badges

Đã trả lời ngày 30 tháng 6 năm 2011 lúc 8:00Jun 30, 2011 at 8:00

8

extensionsToCheck = ['.pdf', '.doc', '.xls']

'test.doc'.endswith[extensionsToCheck]   # returns True

'test.jpg'.endswith[extensionsToCheck]   # returns False

Đã trả lời ngày 30 tháng 6 năm 2011 lúc 7:57Jun 30, 2011 at 7:57

Eumiroeumiroeumiro

200K34 Huy hiệu vàng296 Huy hiệu bạc259 Huy hiệu Đồng34 gold badges296 silver badges259 bronze badges

5

Tốt hơn là phân tích URL đúng cách - theo cách này bạn có thể xử lý

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
1 và
if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
2 một cách chính xác.

from urlparse import urlparse
import os
path = urlparse[url_string].path
ext = os.path.splitext[path][1]
if ext in extensionsToCheck:
  print[url_string]

Đã trả lời ngày 30 tháng 6 năm 2011 lúc 7:57Jun 30, 2011 at 7:57

EumiroeumiroWladimir Palant

200K34 Huy hiệu vàng296 Huy hiệu bạc259 Huy hiệu Đồng12 gold badges97 silver badges124 bronze badges

Tốt hơn là phân tích URL đúng cách - theo cách này bạn có thể xử lý

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
1 và
if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
2 một cách chính xác.

extensionsToCheck = ['.pdf', '.doc', '.xls']
url_string = 'file.doc'
res = [ele for ele in extensionsToCheck if[ele in url_string]]
print[bool[res]]
> True

Wladimir Palantwladimir PalantApr 13, 2021 at 7:54

56.1K12 Huy hiệu vàng97 Huy hiệu bạc124 Huy hiệu đồngAidos

Chỉ trong trường hợp nếu có ai phải đối mặt với nhiệm vụ này một lần nữa, đây là một giải pháp khác:7 silver badges19 bronze badges

Đã trả lời ngày 13 tháng 4 năm 2021 lúc 7:54

print [url_string for extension in extensionsToCheck if[extension in url_string]]

Aidosaidos

7197 Huy hiệu bạc19 Huy hiệu đồngApr 25, 2016 at 17:15

Sử dụng danh sách toàn diện nếu bạn muốn một giải pháp dòng duy nhất. Mã sau trả về một danh sách chứa url_string khi nó có các tiện ích mở rộng .doc, .pdf và .xls hoặc trả về danh sách trống khi nó không chứa tiện ích mở rộng.psun

Lưu ý: Điều này chỉ để kiểm tra xem nó có chứa hay không và không hữu ích khi người ta muốn trích xuất từ ​​chính xác khớp với các tiện ích mở rộng.9 silver badges13 bronze badges

2

Đã trả lời ngày 25 tháng 4 năm 2016 lúc 17:15

psunpsun

extensionsToCheck = ['.pdf', '.doc', '.xls']
url_string = '//.../foo.doc'

print[[extension for extension in extensionsToCheck if[extension in url_string]]]

['.doc']`

5759 Huy hiệu bạc13 Huy hiệu Đồng

print[[re.search[r'[\w+]'+extension, url_string].group[0] for extension in extensionsToCheck if[extension in url_string]]]

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
4

Đây là một biến thể của câu trả lời hiểu danh sách được đưa ra bởi @psun.Nov 8, 2016 at 18:02

Bằng cách chuyển đổi giá trị đầu ra, bạn thực sự có thể trích xuất mẫu phù hợp từ danh sách hiểu [một cái gì đó không thể có với cách tiếp cận

if ['.pdf' or '.doc' or '.xls'] in url_string:
    print[url_string]
3 của @Lauritz-V-Thaulow]Dannid

Hơn nữa, bạn có thể chèn một biểu thức thông thường nếu bạn muốn thu thập thêm thông tin sau khi đã biết mẫu phù hợp [điều này có thể hữu ích khi danh sách các mẫu được phép quá dài để ghi vào một mẫu Regex duy nhất]17 silver badges17 bronze badges

2

Đã trả lời ngày 8 tháng 11 năm 2016 lúc 18:02

Danniddannid

1.39117 Huy hiệu bạc17 Huy hiệu đồng

Kiểm tra xem nó có khớp với regex này không:Jun 30, 2011 at 7:46

3

Bài Viết Liên Quan

Chủ Đề