[PYTHON] "튜플 목록"을 평면 목록 또는 행렬로 변환합니다.
PYTHON"튜플 목록"을 평면 목록 또는 행렬로 변환합니다.
Sqlite를 사용하면 "select..from"명령이 "output"결과를 반환합니다.이 결과는 (Python으로) 인쇄됩니다.
>>print output
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
그것은 튜플리스트 인 것 같습니다. 나는 하나의 간단한 1D 배열 (= 파이썬에서의리스트)에서 "출력"을 변환하고 싶습니다.
[12.2817, 12.2817, 0, 0, 8.52, 8.52]
또는 2x3 매트릭스 :
12.2817 12.2817
0 0
8.52 8.52
"output [i] [j]"를 통해 읽을 수 있습니다.
flatten 명령은 첫 번째 옵션에 대한 작업을 수행하지 않으며 두 번째 옵션에 대해서는 전혀 모르고 있습니다. :)
나에게 힌트를 주시겠습니까? 실제 데이터가 훨씬 커지면 빠를 수 있습니다 (여기에는 단순한 예가 있습니다).
해결법
-
==============================
1.지금까지 가장 빠른 (그리고 가장 짧은) 해결책이 게시되었습니다 :
지금까지 가장 빠른 (그리고 가장 짧은) 해결책이 게시되었습니다 :
list(sum(output, ()))
itertools 솔루션보다 약 50 % 빠르며 맵 솔루션보다 약 70 % 빠릅니다.
-
==============================
2.Python 3에서는 * 구문을 사용하여 반복 가능한 목록을 평평하게 만들 수 있습니다.
Python 3에서는 * 구문을 사용하여 반복 가능한 목록을 평평하게 만들 수 있습니다.
>>> t = [ (1,2), (3,4), (5,6) ] >>> t [(1, 2), (3, 4), (5, 6)] >>> import itertools >>> list(itertools.chain(*t)) [1, 2, 3, 4, 5, 6] >>>
-
==============================
3.itertools 체인을 사용하십시오 :
itertools 체인을 사용하십시오 :
>>> import itertools >>> list(itertools.chain.from_iterable([(12.2817, 12.2817), (0, 0), (8.52, 8.52)])) [12.2817, 12.2817, 0, 0, 8.52, 8.52]
-
==============================
4.또는 다음과 같이 목록을 병합 할 수 있습니다.
또는 다음과 같이 목록을 병합 할 수 있습니다.
reduce(lambda x,y:x+y, map(list, output))
-
==============================
5.반복 가능한 유형으로 작동하는 목록 이해 방법은 여기에 나와있는 다른 방법보다 빠릅니다.
반복 가능한 유형으로 작동하는 목록 이해 방법은 여기에 나와있는 다른 방법보다 빠릅니다.
flattened = [item for sublist in l for item in sublist]
l은 평평하게하는 목록입니다 (OP의 경우 출력이라고 함)
l = list(zip(range(99), range(99))) # list of tuples to flatten
[item for sublist in l for item in sublist]
시간 측정 결과 = 루프 당 7.67 μs ± 129 ns
flattened = [] list(flattened.extend(item) for item in l)
시간 결과 = 루프 당 11 μs ± 433 ns
list(sum(l, ()))
시간 결과 = 루프 당 24.2 μs ± 269 ns
-
==============================
6.큰 배열의 합계 옵션보다 빠른 다른 옵션 :
큰 배열의 합계 옵션보다 빠른 다른 옵션 :
지도 / 확장으로 평면화 :
l = [] list(map(l.extend, output))
지도 대신 목록 이해력으로 병합 (빠름)
l = [] list(l.extend(row) for row in output)
업데이트 : 목록을 반복자로 사용하지 않고 확장이 가능 하나 이해력없이 병합 (가장 빠름)
이것에 대한 다음 답을 확인한 후에는 목록 수정 (이중 조정)을 통해 더 빠른 솔루션을 제공했는데, 약간 조정 해 봤지만 이제는 목록의 실행 (...)이 시간의 큰 부분을 드래그하고 나서 단순한 루프에 대한 목록 이해가 조금 더 면도되었습니다. 최종 해결책은 다음과 같습니다.
l = [] for row in output: l.extend(row)
-
==============================
7.
>>> flat_list = [] >>> nested_list = [(1, 2, 4), (0, 9)] >>> for a_tuple in nested_list: ... flat_list.extend(list(a_tuple)) ... >>> flat_list [1, 2, 4, 0, 9] >>>
위에 표시된 것처럼 튜플 목록에서 단일 목록으로 쉽게 이동할 수 있습니다.
-
==============================
8.임의의 중첩 목록의 경우 (경우를 대비하여) :
임의의 중첩 목록의 경우 (경우를 대비하여) :
def flatten(lst): result = [] for element in lst: if hasattr(element, '__iter__'): result.extend(flatten(element)) else: result.append(element) return result >>> flatten(output) [12.2817, 12.2817, 0, 0, 8.52, 8.52]
-
==============================
9.데이터 구조와 속도면에서 numpy가 만들어진 것입니다.
데이터 구조와 속도면에서 numpy가 만들어진 것입니다.
import numpy as np output = [(12.2817, 12.2817), (0, 0), (8.52, 8.52)] output_ary = np.array(output) # this is your matrix output_vec = output_ary.ravel() # this is your 1d-array
from https://stackoverflow.com/questions/10632839/transform-list-of-tuples-into-a-flat-list-or-a-matrix by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 암호에 특수 문자가 포함되어있을 때 연결 문자열 작성 (0) | 2018.11.23 |
---|---|
[PYTHON] 파이썬에서 이중 백 슬래시를 단일 백 슬래시로 바꾸는 방법은 무엇입니까? (0) | 2018.11.23 |
[PYTHON] matplotlib로 플롯의 구석에 작은 이미지를 삽입하는 방법? (0) | 2018.11.23 |
[PYTHON] 파이썬 : -u 옵션의 중요성? (0) | 2018.11.23 |
[PYTHON] 파일의 시작 부분에 write ()? (0) | 2018.11.23 |