Có một sự hiểu biết danh sách if-other trong Julia


8

Tôi đang cố gắng sử dụng zip theo cách pythonic nhưng ở Julia. Đưa ra hai danh sách:

a =[2;3;4;5;6]
b =[0;7;8;9;10]

Tôi muốn tạo ra sự hiểu biết danh sách sau đây,

c = [x for (x,y) in zip(a, b) if (x<y) else y]

mà trả lại c = [0;3;4;5;6]. Thay vào đó tôi được syntax: expected "]"trả lại.


3
Vì tò mò, điều đó có hoạt động trong Python không?
StefanKarpinki

1
@StefanKarpinki: Không. Viết điều này bằng Python sẽ thất bại vì lý do chính xác giống như trong Julia, về cơ bản là cùng một cách sửa (mặc dù cú pháp toán tử tạm thời của Python là khác nhau).
user2357112 hỗ trợ Monica

Toán tử ternary của Python là x if cond else ythay vì cond ? x : y, vì vậy Python chính xác sẽ là [x if x<y else y for (x, y) in zip(a, b)].
user2357112 hỗ trợ Monica

Câu trả lời:


13

Bạn phải viết lại sự hiểu biết của mình sao cho điều kiện nằm trong "cơ thể" của trình tạo:

c = [x < y ? x : y for (x, y) in zip(a, b)]

Điều kiện ifhiểu hoàn toàn là để lọc tại thời điểm này (mặc dù có thể thêm ý nghĩa bạn muốn).


Điều này hoạt động hoàn hảo. Cảm ơn đã giúp đỡ.
Marc Walton

1
Thay vì toán tử ternary, bạn cũng có thể sử dụng ifelse, đôi khi có thể nhanh hơn (và, bạn có thể phát nó!).
phipsgabler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.