Có thể làm điều này trên một dòng trong Python không?
if <condition>:
myList.append('myString')
Tôi đã thử toán tử bậc ba:
myList.append('myString' if <condition>)
nhưng IDE của tôi ( MyEclipse ) không thích nó, mà không có else
.
Có thể làm điều này trên một dòng trong Python không?
if <condition>:
myList.append('myString')
Tôi đã thử toán tử bậc ba:
myList.append('myString' if <condition>)
nhưng IDE của tôi ( MyEclipse ) không thích nó, mà không có else
.
Câu trả lời:
Có, bạn có thể làm điều này:
<condition> and myList.append('myString')
Nếu <condition>
sai, thì đoản mạch sẽ bắt đầu và phía bên phải sẽ không được đánh giá. Nếu <condition>
đúng, thì phần bên phải sẽ được đánh giá và phần tử sẽ được thêm vào.
Tôi sẽ chỉ chỉ ra rằng việc làm ở trên là khá không phức tạp, và có lẽ tốt nhất là viết điều này, bất kể:
if <condition>: myList.append('myString')
Trình diễn:
>>> myList = []
>>> False and myList.append('myString')
False
>>> myList
[]
>>> True and myList.append('myString')
>>> myList
['myString']
E701 multiple statements on one line
vì vậy cũng không phải là pythonic ...;)
x = object.get('attribute')
trong trường hợp đó
Lý do ngôn ngữ không cho phép bạn sử dụng cú pháp
variable = "something" if a_condition
không else
có điều đó, trong trường hợp ở đâu a_condition == False
, variable
đột nhiên không rõ. Có thể nó có thể là mặc định None
, nhưng Python yêu cầu tất cả các phép gán biến thực sự dẫn đến các phép gán rõ ràng. Điều này cũng áp dụng cho các trường hợp chẳng hạn như lệnh gọi hàm của bạn, vì giá trị được truyền vào hàm được đánh giá giống như RHS của một câu lệnh gán.
Tương tự, tất cả các return
s thực sự phải trả về, ngay cả khi chúng là return
các s có điều kiện . Ví dụ:
return variable if a_condition
không được phép, nhưng
return variable if a_condition else None
được phép, vì ví dụ thứ hai được đảm bảo trả về một thứ gì đó một cách rõ ràng.
variable=None
hoàn toàn hợp pháp. : D
continue if i == 0
trong vòng lặp for.
else pass?
else pass
không hoạt động vì biểu thức bậc ba phải trả về một giá trị có thể được chuyển đến return
. pass
không phải là một giá return
trị hợp lệ .
if a_condition: variable = "something"
và if a_condition: return variable
hợp pháp. Vì vậy, nó thực chất là một sự lựa chọn cú pháp tùy ý của python.
if <condition>: myList.append('myString')
Nếu không, không. Tại sao cần phải đặt nó trên một dòng?
Lưu ý rằng "toán tử bậc ba" là một toán tử . Giống như bất kỳ toán tử nào, nó phải trả về một cái gì đó , vậy làm thế nào bạn có thể có một toán tử bậc ba mà không có else
mệnh đề? Điều gì phải trả về nếu điều kiện không giống như thật?
Về cơ bản, bạn đang yêu cầu do_thing() if <condition> else pass
cấu trúc (sẽ ném SyntaxError
, nếu chạy). Như tôi đã phát hiện ra trong quá trình nghiên cứu cho (phần nào) câu hỏi tương tự do_thing() if condition else None
gần như bạn có thể nhận được (đó chỉ là một cách khác để làm <condition> and do_thing()
). Vì vậy, để tóm tắt ý tưởng này và các câu trả lời khác, đây là các lựa chọn của bạn:
if <condition>: myList.append('myString')
- dường như là cách ít 'hacky' nhất (và do đó được ưa thích hơn)<condition> and myList.append('myString')
myList.append('myString') if <condition> else None
myList.extend(['myString'] if condition else [])
cũng sẽ hoạt động, mặc dù nó hoạt động nhiều hơn các giải pháp khác.
Bạn có thể làm điều gì đó như sau:
myList.append('myString') if <condition> else False
hoặc là
myList.append('myString') if <condition> else 0
myList.append('myString') if True else _
Nhưng nếu bạn không giao cho bất cứ việc gì, cũng không thành vấn đề. Mặc dù vậy, tôi lo ngại về việc người này đang cố gắng hiểu danh sách với logic tương tự.
tôi chỉ làm điều này nếu tôi muốn thêm các phần tử tùy chọn vào danh sách dựa trên một điều kiện.
nums = [
1,
2,
3 if <condition> else None,
4,
]
nums = [i for i in nums if i is not None]
điều này chỉ thay thế giá trị bằng Không nếu điều kiện không được đáp ứng và sau đó, nó chỉ xác định lại danh sách mà không có Giá trị Không. bằng cách này họ bảo toàn chỉ mục của mình nếu điều kiện được đáp ứng