2012-04-22 10 views
14

Tôi đã tự hỏi, có thể đặt nhiều điều kiện if trong một danh sách hiểu không? Tôi đã không tìm thấy bất cứ điều gì như thế này trong tài liệu.Nhiều điều kiện IF trong một danh sách python hiểu

Tôi muốn để có thể làm điều gì đó như thế này

ar=[] 
for i in range(1,n): 
    if i%4 == 0: ar.append('four') 
    elif i%6 == 0: ar.append('six') 
    else: ar.append(i) 

sử dụng một danh sách hiểu. Tôi làm nó như thế nào?

Điều này có thể thực hiện được không? Nếu không, cách nào là cách thanh lịch nhất (pythonic) để thực hiện điều này?

+1

Chỉ vì bạn có thể ... – dkamins

Trả lời

16

Làm thế nào về

ar = [('four' if i % 4 == 0 else ('six' if i % 6 == 0 else i)) for i in range(1, n)] 

Ví dụ, nếu n = 30 đây là

[1, 2, 3, 'four', 5, 'six', 7, 'four', 9, 10, 11, 'four', 13, 14, 15, 'four', 17, 'six', 19, 'four', 21, 22, 23, 'four', 25, 26, 27, 'four', 29] 

ETA: Đây là cách bạn có thể áp dụng một danh sách các điều kiện:

CONDITIONS = [(lambda i: i % 4 == 0, "four"), (lambda i: i % 6 == 0, "six"), 
       (lambda i: i % 7 == 0, "seven")] 

def apply_conditions(i): 
    for condition, replacement in CONDITIONS: 
     if condition(i): 
      return replacement 
    return i 

ar = map(apply_conditions, range(0, n)) 
+2

Cảm ơn! Tôi tin theo cách này tôi có thể thêm bất kỳ số lượng điều kiện nào vào nó. Mặc dù mã sẽ không thể hiểu được! – Rushil

+0

Xem chỉnh sửa của tôi. Tôi chắc chắn bạn có thể tìm ra phần còn lại (nhưng nếu không tôi có thể giúp) –

+0

(Bản gốc của tôi bị bỏ quên để làm cho chúng tuyên bố lambda, phiên bản hiện tại sẽ hoạt động) –

5

Bạn có thể đặt bạn logic trong một chức năng riêng biệt, và sau đó có sự sang trọng của việc hiểu danh sách cùng với wit h khả năng đọc của hàm:

def cond(i): 
    if i % 4 == 0: return 'four' 
    elif i % 6 == 0: return 'six' 

    return i 

l=[cond(i) for i in range(1,n)]