두 개의 목록을 생성합니다. 같은 크기의 여러 목록이 있으며 분석을 위해 다른 목록으로 필터링됩니다. 병렬 목록별로 다른 필터링을하고 있습니다. 나는 a1, b1, c2가리스트의 튜플 (tuple)로 발생하도록 분석 할 수 있지만, 분석은 튜플을 다른 방법으로 스트라이핑하여 분석 (다른리스트, 베타 등)을 분석해야한다. 나는 세 번째 목록을 기반으로 서로 다른 두 가지 목록을 생성 할
를 수행 할 작업을
는 :
>>> a = list(range(10))
>>> b = list(range(10,20))
>>> c = list(i & 1 for i in range(10))
>>>
>>> aprime = [a1 for a1, c1 in zip(a,c) if c1 == 0]
>>> bprime = [b1 for b1, c1 in zip(b,c) if c1 == 0]
>>> aprime
[0, 2, 4, 6, 8]
>>> bprime
[10, 12, 14, 16, 18]
이 제작하는 파이썬/함수형 프로그래밍/itertools 방법이 있어야한다 보인다 두 목록은 한 번만 세 목록을 반복합니다. 예 :
aprime, bprime = [a1, b1 for a1, b1, c1 in zip(a,b,c) if c1 == 0]
물론 이것은 구문 오류를 생성합니다.
질문
는 파이썬 방법이 있나요?마이크로 최적화 차기
못생긴하지만 파이썬 - 투 - 최대 한 줄이 끊임없이 인기 timeit의 솔루션과 내 원래의 코드 "단지에 대한 루프를 사용하여"밖으로 가장자리 케이지 경기 :
>>> import timeit
>>> timeit.timeit("z2(a,b,c)", "n=100;a = list(range(n)); b = list(range(10,10+n)); c = list(i & 1 for i in range(n));\ndef z2(a,b,c):\n\treturn zip(*[(a1,b1) for a1,b1,c1 in zip(a,b,c) if c1==0])\n")
26.977873025761482
>>> timeit.timeit("z2(a,b,c)", "n=100;a = list(range(n)); b = list(range(10,10+n)); c = list(i & 1 for i in range(n));\ndef z2(a,b,c):\n\taprime, bprime = [], [];\n\tfor a1, b1, c1 in zip(a, b, c):\n\t\tif c1 == 0:\n\t\t\taprime.append(a1); bprime.append(b1);\n\treturn aprime, bprime\n")
32.232914169258947
>>> timeit.timeit("z2(a,b,c)", "n=100;a = list(range(n)); b = list(range(10,10+n)); c = list(i & 1 for i in range(n));\ndef z2(a,b,c):\n\treturn [a1 for a1, c1 in zip(a,c) if c1 == 0], [b1 for b1, c1 in zip(b,c) if c1 == 0]\n")
32.37302275847901
왜 병렬 목록을 반복하려고? 당신이 해결하고자하는 전반적인 문제는 무엇입니까? 아마 여러 개의 병렬리스트를 반복하는 것보다 간단 할 것입니다. –
알고리즘은 재무 분석을 조작합니다. 같은 크기의 여러 목록이 있으며 분석을 위해 다른 목록으로 필터링됩니다. 실제로 필자는 병렬 목록별로 다른 필터링을 수행하고 있습니다. 나는 a1, b1, c2가리스트의 튜플 (tuple)로 발생하도록 분석 할 수 있지만, 분석은 튜플을 다른 방법으로 스트라이핑하여 분석 (다른리스트, 베타 등)을 분석해야한다. – hughdbrown
aprime 및 bprime을 작성하는 데 문제가있는 것은 아닙니다. 어떤면에서 부정확하거나 부적절한가? –