Tôi chắc chắn có một cách đơn giản hơn để làm điều này mà không xảy ra với tôi.
Tôi đang gọi một loạt các phương thức trả về một danh sách. Danh sách có thể trống. Nếu danh sách không trống, tôi muốn trả về mục đầu tiên; nếu không, tôi muốn trả về Không. Mã này hoạt động:
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
Dường như với tôi rằng nên có một thành ngữ một dòng đơn giản để làm điều này, nhưng đối với cuộc sống của tôi, tôi không thể nghĩ về nó. Lanhung?
Biên tập:
Lý do tôi đang tìm kiếm một biểu thức một dòng ở đây không phải là tôi thích mã cực kỳ ngắn gọn, mà bởi vì tôi phải viết rất nhiều mã như thế này:
x = get_first_list()
if x:
# do something with x[0]
# inevitably forget the [0] part, and have a bug to fix
y = get_second_list()
if y:
# do something with y[0]
# inevitably forget the [0] part AGAIN, and have another bug to fix
Những gì tôi muốn làm chắc chắn có thể được thực hiện bằng một chức năng (và có thể sẽ được):
def first_item(list_or_none):
if list_or_none: return list_or_none[0]
x = first_item(get_first_list())
if x:
# do something with x
y = first_item(get_second_list())
if y:
# do something with y
Tôi đã đăng câu hỏi vì tôi thường ngạc nhiên bởi những biểu thức đơn giản trong Python có thể làm gì và tôi nghĩ rằng viết một hàm là một việc ngớ ngẩn để làm nếu có một biểu thức đơn giản có thể thực hiện thủ thuật. Nhưng nhìn thấy những câu trả lời này, có vẻ như một chức năng là giải pháp đơn giản.
next(iter(your_list))
, vì nếu bạn cung cấp một đối số thứ hai cho iter
, bạn đang nói với nó rằng đối số thứ nhất có thể gọi được.
next(iter(your_list), None)
thay vìfirst_item(your_list)
giả sửyour_list
là khôngNone
(get_first_list()
vàget_second_list()
phải luôn trả về một lần lặp).