2008-09-29 39 views
5

Khi sử dụng câu lệnh IF trong Python, bạn phải làm như sau để làm cho "thác" hoạt động chính xác.Sử dụng phép so sánh OR với câu lệnh IF

if job == "mechanic" or job == "tech": 
     print "awesome" 
elif job == "tool" or job == "rock": 
     print "dolt" 

Có cách nào để Python chấp nhận nhiều giá trị khi kiểm tra "bằng với" không? Ví dụ,

if job == "mechanic" or "tech": 
    print "awesome" 
elif job == "tool" or "rock": 
    print "dolt" 

Trả lời

27
if job in ("mechanic", "tech"): 
    print "awesome" 
elif job in ("tool", "rock"): 
    print "dolt" 

Các giá trị trong ngoặc là một tuple. Toán tử in kiểm tra xem mục bên tay trái có xảy ra ở đâu đó bên trong bộ điều khiển bên phải hay không.

Lưu ý rằng khi Python tìm kiếm một bộ hoặc danh sách bằng toán tử in, nó thực hiện tìm kiếm tuyến tính. Nếu bạn có một số lượng lớn các mục ở phía bên phải, đây có thể là một nút cổ chai hiệu suất. Một cách quy mô lớn hơn để làm điều này sẽ được sử dụng một frozenset:

AwesomeJobs = frozenset(["mechanic", "tech", ... lots of others ]) 
def func(): 
    if job in AwesomeJobs: 
     print "awesome" 

Việc sử dụng frozenset qua set được lựa chọn nếu danh sách các công việc tuyệt vời không cần phải được thay đổi trong hoạt động của chương trình của bạn.

+0

Vì bạn có câu trả lời được chấp nhận, sẽ tốt hơn nếu bạn cũng đề cập đến thao tác 'item in set()' cho đầy đủ. – tzot

1
if job in ("mechanic", "tech"): 
    print "awesome" 
elif job in ("tool", "rock"): 
    print "dolt" 
1

Trong khi tôi không nghĩ rằng bạn có thể làm những gì bạn muốn trực tiếp, người ta thay thế là:

if job in [ "mechanic", "tech" ]: 
    print "awesome" 
elif job in [ "tool", "rock" ]: 
    print "dolt" 
0

Trong các ngôn ngữ khác mà tôi muốn sử dụng một công tắc/lựa chọn công bố để hoàn thành công việc. You can do that in python too.

3

Bạn có thể sử dụng trong:

if job in ["mechanic", "tech"]: 
    print "awesome" 

Khi kiểm tra số rất lớn, nó cũng có thể có giá trị lưu trữ ra một bộ các mục cần kiểm tra, vì điều này sẽ nhanh hơn. Ví dụ.

AwesomeJobs = set(["mechanic", "tech", ... lots of others ]) 
... 

def func(): 
    if job in AwesomeJobs: 
     print "awesome" 
1

Tuples có các mục không đổi được lưu trữ như hằng số trong hàm được biên dịch. Chúng có thể được nạp với một lệnh duy nhất. Danh sách và bộ mặt khác, luôn được xây dựng lại trên mỗi lần thực hiện.

Cả bộ và danh sách đều sử dụng tìm kiếm tuyến tính cho người điều hành. Bộ sử dụng tra cứu dựa trên hàm băm, vì vậy sẽ nhanh hơn cho số lượng tùy chọn lớn hơn.

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