저는 최근 특이한 문제에 직면 해 있습니다. 최근에 특정 유형의 목록 내포물을 만들 필요성을 느꼈습니다. 예를 들어목록 이해력이있는 다른 패턴
:
[ re.search('xyz', l).group(0) for l in my_list if re.search('xyz', l) ]
이제 예리한 독자는이 목록의 이해가 정규 표현식 두 번 일치하는 않는 관찰 할 수있다.
나는이 '여분의'오버 헤드를 어떻게 든 목록 내재의 우아함을 잃어 버리는 것을 제거하고 싶습니다. 전에 누군가 그런 문제에 직면 했습니까? 그렇다면 어떻게 해결할 것인가? 나는 목록에서 값/객체 x
에 적용하는 기능 f()
이 일반적으로
은, 지금은 내 목록에 경우에만, f(x).a
statisfies 어떤 조건을 f(x).b
를 원하는.
empty_list = []
for x in my_list:
val = f(x)
if val.a == condition:
empty_list.append(val.b)
이 가능한 솔루션입니다, 그러나 이것은 내가 더 '파이썬'방법이 있는지 해요, 너무 자세한 것 같다 :
나는
empty_list = []
for l in my_list:
match = re.search('xyz', l)
if match:
empty_list.append(match.group(0))
또는 더 일반적으로 알고 이렇게.
"지능형리스트의 우아함을"- 당신이 여기에 초과 중량을 적용한 생각합니다. 표현식이 충분히 복잡 해지면 이해가 더 이상 "속할"수 없다 (그렇지 않으면 이해할 수 없을 것이다!) –
중첩 된 목록 이해력을 사용할 수있다 : [[re.search ('에서 x에 대해 x.group (0) xyz ', l) for my_list] if x]' –
@MartijnPieters 예, 그게 무슨 뜻인지, 미안 해요. 수정/수정. – ffledgling