나에게 일어나지 않는 간단한 방법이 있다고 확신합니다.
목록을 반환하는 많은 메소드를 호출하고 있습니다. 목록이 비어있을 수 있습니다. 목록이 비어 있지 않으면 첫 번째 항목을 반환하고 싶습니다. 그렇지 않으면 None을 반환하고 싶습니다. 이 코드는 작동합니다 :
my_list = get_list()
if len(my_list) > 0: return my_list[0]
return None
나는 이것을하기위한 간단한 한 줄의 관용구가 있어야하는 것처럼 보이지만, 내 삶을 위해 나는 그것을 생각할 수 없다. 있습니까?
편집하다:
여기서 한 줄짜리 식을 찾고있는 이유는 엄청나게 간결한 코드를 좋아하지 않기 때문에 다음과 같은 많은 코드를 작성해야하기 때문입니다.
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
내가하고 싶은 일은 분명히 기능을 통해 달성 될 수 있습니다 (아마도 가능할 것입니다).
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
파이썬에서 간단한 표현식이 할 수있는 일에 자주 놀랐 기 때문에 질문을 게시했으며 간단한 표현식이 있으면 트릭을 수행 할 수있는 경우 함수를 작성하는 것이 어리석은 일이라고 생각했습니다. 그러나 이러한 답변을 보면 함수 가 간단한 솔루션 인 것 같습니다 .
next(iter(your_list))
당신이에 두 번째 인수를 제공하는 경우 때문에 iter
, 당신은 첫 번째 인수는 호출임을를 말하는 것입니다.
next(iter(your_list), None)
대신first_item(your_list)
가정your_list
하지 않습니다None
(get_first_list()
그리고get_second_list()
항상 반복자를 반환해야합니다).