일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- hackerrank
- ubuntu
- Baekjoon
- 맥북
- 백준
- Docker
- 편스토랑 우승상품
- ChatGPT
- leetcode
- 데이콘
- PYTHON
- programmers
- 금융문자분석경진대회
- SW Expert Academy
- 파이썬
- 프로그래머스
- gs25
- Real or Not? NLP with Disaster Tweets
- 코로나19
- 프로그래머스 파이썬
- 자연어처리
- dacon
- github
- 더현대서울 맛집
- 캐치카페
- Git
- 우분투
- AI 경진대회
- 편스토랑
- Kaggle
- Today
- Total
솜씨좋은장씨
[Python] List Comprehension과 리스트를 다루는 여러가지 방법들! 본문
추후 블로그를 참고하면서 사용하면 편리할 것 같은 것들을 정리해보았습니다.
먼저 여러개의 숫자를 포함한 리스트를 하나 정의합니다.
num_list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
이 리스트를 활용하여 몇가지 방법에 대해 적어보려합니다.
1. N보다 큰 숫자만 남기기
만약 N이 3이라고 할때 List Comprehension을 사용하지 않았을경우
new_list = []
for num in num_list:
if num > 3:
new_list.append(num)
평소에는 위와 같이 작성하게 됩니다.
여기서 List Comprehension을 사용하면 더 짧고 간결하게 코드를 작성할 수 있습니다.
new_list = [ num for num in num_list if num > 3 ]
이외에도 filter를 활용하는 방법도 있습니다.
new_list = list(filter(lambda x: x > 3, num_list))
2. 리스트 내 각 요소에 N씩 더한 리스트 만들기
만약 N이 3이라고 할때 List Comprehension을 사용하지 않았을 경우
for i in range(len(num_list)):
num_list[i] += 3
List Comprehension을 사용한 경우
num_list = [ num + 3 for num in num_list ]
lambda를 활용한 경우
num_list = list(map(lambda num: num+3, num_list))
3. 같은 값으로 채워진 길이가 N인 리스트 만들기
만약 N이 4이고, 각각의 인자가 None값을 가지는 [None, None, None, None] 리스트를 만드는 경우
four_nones = [None] * 4
다음의 경우 처럼 실행하게되면 모든 성분이 동일하게 불변의 값으로 채워진 리스트를 만들 수 있습니다.
하지만 이 방법을 활용하여 각각의 인자가 None값이 아닌 비어있는 리스트( [ ] ) 를 인자로 가지려고하는 경우
four_empty_lists = [[]] * 4
위의 방법처럼 * 연산자를 활용하여 리스트를 만들게 되면 한가지 문제가 생기게 됩니다.
만약 이렇게 만든 리스트의 인자중에 가장 앞에있는 비어있는 리스트 인자에만 'TEST' 라는 값을 넣고자 할 때
four_empty_lists[0].append("TEST")
다음의 코드를 활용하여 "TEST"를 추가하고 출력해보면
우리가 생각했던대로 맨 앞의 비어있는 리스트 인자에만 값이 추가되는 것이 아니라
모든 인자에 "TEST" 가 출력되는 것을 확인할 수 있습니다.
print(four_empty_lists)
[ ["TEST"], ["TEST"], ["TEST"], ["TEST"] ]
이는 리스트가 변경 가능한 객체이기 때문이며
* 연산자를 활용하여 이러한 리스트를 만들면 모두 같은 리스트를 가리키는 N개의 참조가 생기기 때문입니다.
따라서 이를 원치 않는다면
List Comprehension을 활용하여 해결할 수 있습니다.
four_empty_lists = [ [] for __ in range(4) ]
이 방식을 사용하게되면
이전과 동일하게 맨 앞에 비어있는 리스트 인자에만 "TEST"를 추가하고자 하여 다음의 코드를 실행해보면
four_empty_lists[0].append("TEST")
print(four_empty_lists)
다음과 같이 원하는대로 맨 앞의 비어있는 리스트 인자에만 "TEST"값이 잘 추가되어있는 것을 확인할 수 있습니다.
[ ["TEST"], [], [], [] ]
4. 이차원 배열을 1차원 배열로 만드는 방법
2D_list = [[1, 2], [3, 4]]
위와 같이 2차원 배열이 하나 존재할때 이 배열을
1D_list = [1, 2, 3, 4]
위와 같이 바꾸는 방법은 다음과 같습니다.
1D_list = list(itertools.chain.from_iterable(2D_list))
'Programming > Python' 카테고리의 다른 글
[Python] Pycharm에서 unittest 사용해보기! (0) | 2020.04.03 |
---|---|
[Python] Sphinx 를 활용하여 Python 문서화해보기! (0) | 2020.04.02 |
[Python] 2to3 를 통해 Python 2로 작성된 코드를 Python3로 쉽게 바꾸어보기! (2) | 2020.04.02 |
[Python] flask와 mongoDB를 활용하여 REST API 만들기 1 - CSV 데이터를 불러와 mongoDB에 데이터 추가하기 (0) | 2020.03.29 |
[Python] 두 개의 문자열 서로 바꾸기 (0) | 2020.03.28 |