스택큐힙리스트
어떤 조건을 만족하는 속성 값을 가진 목록 내의 객체를 찾습니다. 본문
나는 물체 목록을 갖고 있습니다. 이 목록에서 속성 (또는 메서드 결과 - 무엇이든)이 value 와 같은 하나의 물체 (첫 번째 또는 그외)를 찾고 싶습니다.
그것을 찾는 가장 좋은 방법은 무엇인가요?
다음은 시험 케이스입니다.
class Test:
def __init__(self, value):
self.value = value
import random
value = 5
test_list = [Test(random.randint(0,100)) for x in range(1000)]
# that I would do in Pascal, I don't believe it's anywhere near 'Pythonic'
for x in test_list:
if x.value == value:
print i found it!
break
저는 생성자와 reduce()를 사용한다 해도 그 리스트를 반복하는 것은 변함이 없을 것 같습니다.
참고: value에 대한 방정식은 예시에 불과합니다. 물론, 우리는 어떤 조건을 충족하는 요소를 얻고자 합니다.
답변 1
next((x for x in test_list if x.value == value), None)
이것은 조건과 일치하는 목록의 첫 번째 항목을 가져오고, 항목이 일치하지 않는 경우 None를 반환합니다. 이것은 내가 선호하는 단일 표현형입니다.
하지만,
for x in test_list:
if x.value == value:
print(i found it!)
break
소박한 루프-종료 버전은 완벽하게 파이써닉합니다 - 간결하고 명확하며 효율적입니다. 원-라이너와 동일한 동작을 수행하도록 만들려면:
for x in test_list:
if x.value == value:
print(i found it!)
break
else:
x = None
당신이 반복문에서 나가지 않으면 x에 None을 할당합니다.
답변 2
[한국어]리스트 안에 특정 속성 값이 일치하는 객체를 찾는 방법에 대해서 알아보도록 하겠습니다. 이 방법은 파이썬을 비롯한 대부분의 프로그래밍 언어에서 사용합니다. 우선, 리스트 안에 들어있는 객체들은 서로 다른 속성 값을 가지고 있을 수 있습니다. 그 중에서도 우리는 원하는 조건에 맞는 객체를 찾기 위해 속성 값이 일치하는 객체를 찾는 것입니다.
우선, 파이썬에서는 filter() 함수를 이용해 리스트 안에서 원하는 조건을 만족하는 객체를 찾을 수 있습니다. 이 함수는 두 개의 인자를 받는데, 첫 번째 인자는 함수이고, 두 번째 인자는 리스트입니다. filter() 함수는 리스트의 모든 객체를 첫 번째 인자로 받은 함수에 대입하여 조건에 맞는 객체만을 필터링하여 새로운 리스트를 반환합니다.
다음으로, lambda 함수를 이용해서 속성 값이 일치하는 객체를 찾을 수 있습니다. lambda 함수는 간단한 함수를 한 줄로 작성할 수 있게 해주는 파이썬의 기능입니다. 이를 이용해서 원하는 조건에 맞는 함수를 만들어 filter() 함수에 넣어 사용할 수 있습니다.
예를 들어, 리스트 안에 있는 객체들 중에서 특정 속성 값이 5인 객체를 찾기 위해서는 다음과 같이 코드를 작성할 수 있습니다.
```python
list1 = [{name: apple, quantity: 3},
{name: banana, quantity: 8},
{name: orange, quantity: 5},
{name: watermelon, quantity: 2}]
result = list(filter(lambda x: x[quantity] == 5, list1))
print(result)
```
위 코드에서는 lambda 함수를 이용해서 quantity 속성 값이 5인 객체를 찾았습니다. 그 결과, [{name: orange, quantity: 5}]가 출력됩니다.
따라서, 이처럼 filter() 함수와 lambda 함수를 이용해서 리스트 안에서 특정 속성 값이 일치하는 객체를 찾을 수 있습니다. 이를 이용해서 다양한 조건에 맞는 객체를 찾아 분석에 활용할 수 있습니다.