2012-11-22 20 views

Trả lời

3

Nếu tôi Tóm lại, bạn muốn một cái gì đó mà:

  • là một biểu
  • đánh giá đến None khi không tìm thấy
  • đánh giá với chỉ số khi tìm thấy
  • Không sử dụng một ternary (để Python 2.4 có thể xử lý nó)

Giải pháp duy nhất tôi có thể đưa ra mà đáp ứng mọi yêu cầu là thế này điều kỳ lạ:

(lambda x: x and x - 1)((str.find(substr) + 1) or None) 

Ví dụ:

>>> (lambda x: x and x - 1)(('abcd'.find('b') + 1) or None) 
1 
>>> (lambda x: x and x - 1)(('abcd'.find('_') + 1) or None) 
>>> 

Tôi không cài đặt Python 2.4 để kiểm tra, vì vậy tôi chỉ có thể hy vọng nó hoạt động.

+1

lambda thực sự hoạt động! – ThunderEX

5
None if str.find() < 0 else str.find() 

và nếu trùng lắp mã phiền bạn (và nó nên):

index = str.find() 
None if index < 0 else index 

Điều kiện ternary là added trong 2.5. Vì vậy, nếu bạn có một phiên bản cũ của Python bạn có thể làm điều này thay vì:

def my_find(str, sub_str) 
    index = str.find(sub_str) 
    if index < 0: 
     return None 
    else: 
     return index 
+0

Tks.My Python 2.4 không thể hỗ trợ điều đó: ( – ThunderEX

+0

@ThunderEX: Xem chỉnh sửa – zenpoy

7

Bạn có nghĩa là một cái gì đó như thế này?

def find2(str, substr): 
    result = str.find(substr) 
    return result if result != -1 else None 

Trong Python 2.4, thay đổi dòng cuối cùng để

if result != -1: 
     return result 
    else: 
     return None 
+0

Chỉ cần lưu ý, có thể là một ý tưởng tồi khi gọi biến 'sub' vì tồn tại dưới dạng hàm trong một vài không gian tên. – Serdalis

+0

@Serdalis: Bạn đúng, tôi đã thay đổi nó –

+0

Tks nhưng Python 2.4 của tôi không thể hỗ trợ điều đó: (Có cách nào khác không? – ThunderEX

Các vấn đề liên quan