๐Ÿ“˜ Programming/Python

[Python3] 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ 1์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค๊ธฐ (sum, reduce, iterable, numpy, flatten)

ํ•œ์ฝ”๋”ฉ 2020. 10. 4. 02:28
728x90
728x90

my_list = [[1, 2], [3, 4], [5, 6]]

 

์œ„์™€ ๊ฐ™์€ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ฅผ

 

my_list = [1, 2, 3, 4, 5, 6]

 

์™€  ๊ฐ™์ด 1์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค.

 

์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ• - ๋ฐ˜๋ณต๋ฌธ ์‚ฌ์šฉ (์ €์ˆ˜์ค€ ์ฝ”๋”ฉ)

mylist = [['A', 'B'], ['X', 'Y'], ['1']]

def solution(mylist):
    answer = []

    for arr in mylist:
        for j in range(len(arr)):
            answer.append(arr[j])

    return answer

print (solution(mylist))

 

๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ my_list์›์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๊บผ๋‚ด์–ด answer์— ์ €์žฅํ•œ๋‹ค. ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์ด ์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉ์ด๋‹ค.

 

๋ฐฉ๋ฒ• 1 - sum ํ•จ์ˆ˜

my_list = [[1, 2], [3, 4], [5, 6]]

print (sum(my_list, []))

 

๋ฐฉ๋ฒ•2 - itertools.chain ์‚ฌ์šฉ

import itertools

my_list = [[1, 2], [3, 4], [5, 6]]

print(list(itertools.chain.from_iterable(my_list)))

 

itertools์— chain์—์„œ from_iterable์„ ์‚ฌ์šฉํ•˜์—ฌ my_list์˜ ์›์†Œ ๊ฐ๊ฐ์„ ์ถ”์ถœํ•˜์—ฌ list๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

๋ฐฉ๋ฒ•3 - itertools์™€ unpacking ์‚ฌ์šฉ

import itertools

my_list = [[1, 2], [3, 4], [5, 6]]

print (list(itertools.chain(*my_list)))

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฉ๋ฒ•2์™€ ๊ฐ™์ด itertools.chain์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, my_list๋ฅผ ์ ‘๊ทผํ•˜์—ฌ ์›์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹์ด๋‹ค. 

 

 

๋ฐฉ๋ฒ•4 - list comprehension ์‚ฌ์šฉ

my_list = [[1, 2], [3, 4], [5, 6]]

print ([element for array in my_list for element in array])

 

๋ฐฉ๋ฒ• 5 - reduce ํ•จ์ˆ˜ ์ด์šฉ1

from functools import reduce
import operator

my_list = [[1, 2], [3, 4], [5, 6]]

print (list(reduce(operator.add, my_list)))

 

functools์˜ reduceํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹์ด๋‹ค. my_list์˜ ๊ฐ๊ฐ ์›์†Œ๋ฅผ operator.add๋ผ๋Š” ๋ง์…ˆ ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ์— ๊ฐ ์›์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

 

๋ฐฉ๋ฒ• 6 - reduce ํ•จ์ˆ˜ ์ด์šฉ2

from functools import reduce

my_list = [[1, 2], [3, 4], [5, 6]]

print (list(reduce(lambda x, y: x+y, my_list)))

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ reduce๋ฅผ ์‚ฌ์šฉํ–ˆ์œผ๋‚˜ ๋žŒ๋‹ค ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ์ •์˜ํ•˜์˜€๋‹ค.

 

 

๋ฐฉ๋ฒ• 7 - numpy ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ flatten ์ด์šฉ

import numpy as np

my_list = [[1, 2], [3, 4], [5, 6]]

print (np.array(my_list).flatten().tolist())

 

ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ third-party๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ numpy๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

 

์•„๋ž˜๋Š” ๊ฐ ๋ฐฉ์‹์— ๋Œ€ํ•œ ํผํฌ๋จผ์Šค(์„ฑ๋Šฅ) ์ฐจ์ด๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. (์ถœ์ฒ˜ : winterj.me/list_of_lists_to_flatten/)

 

 

728x90
๋ฐ˜์‘ํ˜•