나열 목록을 만드는 방법을 균등형 열거합니다?
제가 생각하기엔 단순 나열) 의 목록을 만들 수 있는지 여부를 짧은보기 열거합니다 파이썬.
하지만 어쩌면 내가 할 수 있는 '는' 는 몇 가지 준활성 " one-liner" 루프,? 하지만 난 () ',' 내가 오류가 발생할 수 있는 노력은 한 것 같습니다.
- 코드*의
l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
reduce(lambda x, y: x.extend(y), l)
-
- 오류 메시지
<! - 언어: > 랑 없음 -;
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
AttributeError: 'NoneType' object has no attribute 'extend'
2901
43
주어진 열거합니다 l ',' 목록
'flat_list = [항목으로의 하위 목록에 있는 l 항목에 대한 하위 목록에]'
즉:
는 지금까지 shortcuts 게시하기를 빠릅니다. ('l' 은 목록 병합하려면.)
다음은 해당 기능:
증거로 사용할 수 있습니다 ',' 티마이트 모듈에서의 표준 라이브러리.
설명: '+' ('합' 묵시적 사용 등) 를 기반으로 shortcuts 높다 '는' 같은 경우 하위 목록 - L, O (L ) 는 중간 중간 결과를 가져오는 결과 목록, 각 단계에서 더 이상 새로운 목록을 얻을 수 있는 모든 항목을 객체에는 할당할지 및 이전 중간 결과를 통해 복사됨 있어야 합니다. (물론 새로 추가된 몇 가지 끝에). 따라서 실제 손실됩니다 단순성과 일반성, say you I L 각 하위 목록 항목을 않고 있다. 나는 내가 번 항목을 l 1 앞뒤로 복사됩니다 첫 번째, 두 번째 항목을 l 2 시간, 드릴링됩니다. 가 합계 총 복제본에 내가 배, 즉, "나는 x 를 x 1 에서 제외된 (l ) /2 * l '.
그냥 한 번 각 항목을 목록을 생성하는지 목록에 번역 및 복제본에 오버 (변경분이 결과 당초 거주 장소 목록) 도 정확히 한 번.
['아르투로슈자클랭 ()'] [1] 사용할 수 있습니다.
또는 파이썬 2.6 를 사용하여 > = ['itertools.chain.from_iterable ()'] [2] # 39, 할 수 있는 t doesn& 꺼내기 목록:
이 방식은 ' [항목으로의 하위 목록에 있는 l 항목에 대한 하위 목록에] 것보다 더 잘 시각이 잘 드러나' 와 너무 빠른 것으로 보인다.
[1]: http://docs.python.org/2/library/itertools.html # 아르투로슈자클랭 [2]: http://docs.python.org/2/library/itertools.html # itertools.chain.from_iterable
이 밖에 전달된 이트레이블 요소를 그냥 둔 첫 번째 인수, 두 번째 인수의 초기 값으로 of the sum (않을 경우 사용할 때 아닌 '0' 이 사건과 부여하느뇨 오류가 있습니다).
왜냐하면 당신은 합산 네스트된 열거합니다 많아진다는 것을 알 수 있습니다 ' [1.3] + [2.4]' 결과 'sum ([[1.3], [2.4]], []), 즉' 같음 ' [1.3,2.4]'.
참고로 열거합니다 때만 대한 목록. # 39 의 목록에 열거합니다 열거합니다 you&, ll, 또 다른 솔루션을 합니다.
내가 가장 테스트되었습니다 제안됩니다 솔루션과 [페르프 플로트] (https://github.com/nschloe/perfplot) (pet) 사업은 본질적으로 티마이트 내거냐 주위에서 래퍼 ','), and found "'파이썬 펑스올스트러더스 (로프라도리이콩카트, a, []) "' 가장 빠른 해결 할 수 있다. ('오페라토리어드 똑같이' 는 빠른.)
! [입력하십시오. 이미지 여기에 설명을] [1]
코드 플롯할 재현한다.
"'파이썬 펑스올스 임포트합니다 아르투르스 임포트합니다 누마피 임포트합니다 가져오기의 작동자 페르프 플로트 임포트합니다
데프 포퍼 (a): [항목으로의 하위 목록에 있는 품목에 대해 하위 목록에] 반품하십시오.
데프 sum_brackets (a): 반품하십시오 sum (a, [])
데프 functools_reduce (a): 펑스올스트러더스 반품하십시오 (오페라토리콘카트, a)
데프 functools_reduce_iconcat (a): 펑스올스트러더스 반품하십시오 (로프라도리이콩카트, a, [])
데프 itertools_chain (a): 반품하십시오 목록 (itertools.chain.from_iterable (a))
데프 numpy_flat (a): 반품하십시오 목록 (누마피콜라이 오프라트 (a))
데프 numpy_concatenate (a): 반품하십시오 목록 (누마피.콩카테네이트 (a))
페르프 플로t.쇼 ( 설정 람다 (λ) = n: [목록 (범위 (10))] n 커널 = [ 포퍼 sum_brackets functools_reduce functools_reduce_iconcat,, itertools_chain numpy_concatenate numpy_flat, ], n_range = [ *k ᄀ씨 대한 범위 내 (16)] 루크스 = True, 학 (접사) = true,
39, & # 39, lists& 스라벨 num =
) "'
확장 () 는 '예' 방법 'x' 에 유용한 값을 반환하는 대신 수정되므로 (() '이' 줄일 수 있을 것으로 기대하고 있다).
더 빨리 할 수 있는 '' 버전 약간만이라도
이것은 외곽진입 , , 문장열 숫자임 적용되는 일반 및 컨테이너입니다 네스트된 열거합니다 혼합됨.
[dep]: https://docs.python.org/3/whatsnew/3.7.html # id3 [기초상식]: https://docs.python.org/3/library/collections.abc.html # module-collections.abc
39, t know where you don& 스케쳐내 데이터 구조 플랫화합니다 얼마나 깊은 it& 네스트된 ['iteration_utilities.deepflatten'] # 39 에 사용할 수 있습니다 (https://iteration-utilities.readthedocs.io/en/latest/generated/deepflatten.html), sup> < 1< /sup>;;
39 을 할 수 있도록 발생기입니다 it&, 그 결과 '목록' 캐스트 또는 명시적으로 반복할 것이다.
한 수준 자체가 이트레이블 플랫화할 아웃하기로 각 항목을 사용할 수도 있습니다. ['iteration_utilities.flatten'] (https://iteration-utilities.readthedocs.io/en/latest/generated/flatten.html) 를 중심으로 ['itertools.chain.from_iterable'] 그 자체가 얇은 래퍼 (https://docs.python.org/library/itertools.html # itertools.chain.from_iterable):
그냥 시간이 맞지 않아 일부 추가하여 따라 니코 Schl& # 246, 멜 소개된 이 질문에 대답할 didn& 함수은 포함시키십시오 # 39, t):
! [입력하십시오. 이미지 여기에 설명을] [1]
S # 39, it& 플롯할 로그 로그 포함하기 위해 큰 범위의 값을 스팬된. 질적 위한 곳이었다. 낮을수록 좋음.
결과에 따르면 '합' 될 경우 그 후 불과 하지만 내부 이트라블레스 이트레이블 map_layer 가장 오래 이트라블레스 itertools.chain.from_iterable iteration_utilities.deepflatten '또는' 만 ',' 번역 '합리적' 가 가장 빠른 성능을 향상시키든 네스트된 %s/dbase/ext_table. itertools.chain.from_iterable 같은 것에 의해 이미 Schl& # 246, 니코 (mer).
<, sup>, 1 부인: # 39 m, 저자는 i& iqn library< /sup>;
이 액수는 버전 및 정보기술 (it), t # 39 분 넘게 계속 작동하고 hasn& 수행되 프로세성 아직!
중견 기업 목록:
작은 열거합니다 사용 및 티마이트: 번호 = 1 000 000
함께 오페라토리아다 혼란이 있을 것 같다 ''! 두 경우 모두, 즉 '에 대한 올바른 용어를 추가했는지 열거합니다 추가할 수 없습니다.' 는 '오페라토리콘카트 concat' what you need 사용할 수 있습니다.
39 이것은 생각하는 것만큼 쉽게 이 you& 경우, 기능, re:
보이지 않는 절감하십시오 e0100042.log 유형, 외면하였나니 확보하십시오 튜플 다시 튜플 제공할 수 있습니다. # 39 의 시도하시겠습니까 let& 수신기마다 목록:
아하, 너회가 물러서요 바뀌엇어요.
성능 어때.
'는' from_iterable 상당히 빠른! 그러나 it& # 39 을 (를) '' s no 비교, concat 줄일 수 있습니다.
왜 확장하십시오 사용하고 있는가?
이렇게 하면 제대로 작동합니다.
# 39 를 사용하는 경우, , t Don& 휠 장고 것이다.
'More_itertools' 고려해보십시오 설치 패키지.
이 구현 출고됩니다 장치당 ['플랫화할'] [1docs] ([출처] [1code] 의 [아르투르스 비법을], [3]).
현재 버전 2.4, 좀 더 복잡한 플랫화할 수 있습니다, 네스트된 이트라블레스 와 ['more_itertools.collapse'] [2docs] ([출처] [2code] 에서 이반트 했다).
[1code]: https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/recipes.html # 플랫화할 [2code]: https://more-itertools.readthedocs.io/en/stable/_modules/more_itertools/more.html # 축소 [1docs]: https://more-itertools.readthedocs.io/en/latest/api.html # more_itertools.flatten [2docs]: https://more-itertools.readthedocs.io/en/latest/api.html # more_itertools.collapse [3]: https://docs.python.org/3/library/itertools.html # 아르투르스 비법을
그 이유는 사용하는 함수가 didn& # 39, 빗나갔다. 현재 위치 및 확장 연장시킵니다 어레이입니다 doesn& # 39, t return it. 아직도 일부 기법을 사용하여 람다 (λ) 에서 x 반품하십시오 수 있습니다.
참고: +) 에 비해 효율성이 더 확장할 수 있습니다.
39 의 기능을 Anil& 충족되었으며 나쁜거라 기능을 사용자가 수동으로 위에서 두 번째 인수를 지정할 수 있다는 것이 单捞磐啊 항상 빈 목록 ' []'. 이렇게 하면 될 것이 기본. 이 때문에 객체에는 운행에서어떠한 파이썬 함수 내에 있는 인수만 아닌 작동합니까 설정해야 합니다.
39 의 here& 작동하는 기능:
테스트:
재귀 버전
매플로리발스부k.플래튼 () '은' 보다 더 깊은 네스트된 열거합니다 중첩할 경우에도 사용할 예.
결과:.
이는 18x underscore._.flatten 보다.
텍스트 기반의 가변 길이 열거합니다 가져다줄래요 다룰 때 이 수락됨 오토메이티드 작동하지 않습니다. 대체 그 일을 슬라이드에서는 외곽진입 가져다줄래요.
수락됨 오토메이티드 하지 않았던 work:
* 작동합니까 가져다줄래요 제안된 새로운 솔루션으로 않았다.
가장 단순한 다음과 같은 날 것 같다.
39 한 NumPy& 사용할 수 있으며, s [균등형] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.flat.html):
편집할지 11/02/2016: 모두 동일한 치수에는 하위 목록 경우에만 적용됩니다.