* 파이썬은 0부터 숫자를 센다.
* 문자열, 리스트, 튜플, 딕셔너리 등의 값이 비어 있으면(" ", [ ], ( ), { }) 거짓이 된다. 당연히 비어있지 않으면 참이 된다. 숫자에서는 그 값이 0일 때 거짓이 된다. 또한, None도 거짓을 뜻한다.
* 배열 (Array) - 정적 할당
데이터가 많아지면 그룹 관리의 필요성 -> 배열
같은 종류의 여러 데이터를 하나의 이름으로 그룹핑해서 효율적으로 관리
배열을 이용하면 하나의 변수에 여러 정보를 담을 수 있고, 반복문과 결합 하면 많은 정보도 효율적으로 처리
배열 인덱스는 값에 대한 유일무이한 식별자 (참고로 리스트에서 인덱스는 몇 번째 데이터인가 정도의 의미를 가짐)
그러므로 인덱스 번호로 빠른접근이 가능, 즉 데이터의 위치에 대해 직접적인 접근(Access)가 가능
배열은 길이를 바꿀 수 없는 한계가 있으며, 인덱스에 따라서 값을 유지하기 때문에 엘리먼트가 삭제되어도 빈자리(null)가 남게 된다. (불필요한 메모리 차지)
중간에 데이터 삭제나 데이터의 추가 및 삭제가 불편
위와 같은 한계를 해결하기 위해서 linked list 자료형을 활용할 수 있다. (탐색, 할당, 복사, 삭제 등의 리소스 낭비가 없다.)
* 리스트 (List) - 동적 할당
리스트는 배열이 가지고 있는 인덱스라는 장점을 버리고 대신 빈틈없는 데이터의 적재 라는 장점을 취한 데이터 스트럭쳐
리스트 자료구조의 핵심은 엘리먼트들 간의 순서. 따라서 리스트를 다른 말로는 시퀀스(sequence)
즉 순서가 있는 데이터의 모임이 리스트
리스트에서 인덱스는 몇 번째 데이터인가 정도의 의미를 가짐 (배열에서의 인덱스는 값에 대한 유일무이한 식별자)
빈 엘리먼트는 허용하지 않음
포인터를 통하여 다음 데이터의 위치를 가르키고 있으므로 삽입 삭제가 쉬움.
동적이므로 배열과 다르게 크기가 정해져있지 않음.
검색 성능이 좋지 못함. 이유는 배열은 데이터의 위치에 대해서 직접적인 접근이 가능하지만, 리스트는 직접 접근이 불가능하고 처음부터 몇 번째인지 일일이 세어가면서 위치를 찾기 때문
- 데이터 갯수가 확실하게 정해져 있고, 추가적인 삽입 삭제가 없고 검색이 필요할 때 배열이 더 효율적
데이터의 크기가 정해져 있지 않고, 추가적인 삼입 삭제가 많으며 검색이 필요하지 않을때 리스트가 더 효율적
인덱스가 중요한 경우는 배열을 사용, 인덱스가 중요하지 않은 경우에는 리스트를 사용
리스트에 대한 효용은 어떤 언어를 사용하느냐에 따라서 달라진다. 특히 많은 언어가 리스트를 기본적으로 지원하기 때문에 리스트를 직접 구현하는 경우는 줄고 있음
* C
리스트를 지원하지 않음. 대신 배열을 지원.
리스트를 사용하려면 직접 만들거나 라이브러리를 사용해야함. (따라서 리스트에 대한 깊은 이해와 안목이 필요)
* Python
기본적으로 리스트를 제공하며, 배열은 제공하지 않음.
파이썬에서는 리스트가 배열.
파이썬의 리스트는 크기가 가변적이고, 어떤 원소 타입이던 저장할 수 있다는 장점을 가진다.
대신 C의 배열보다 메모리를 더 많이 필요로 한다는 단점이 있음.
* Numpy Array
Numpy를 사용하면 Array를 Python에서 사용할 수 있습니다.
동적으로 계속 크기가 변할 수 있는 Python List와 달리 NumPy Array는 고정된 크기를 갖습니다. Size를 변화하면 기존의 array를 삭제하고 새로운 array를 생성해야 합니다.
NumPy Array는 대량의 데이터에 대한 고급 수학적 및 기타 유형의 작업을 용이하게 합니다. 일반적으로 Python의 기본 제공 기능을 사용하여 가능한 것보다 적은 코드로 보다 효율적으로 작업 수행할 수 있습니다. NumPy를 쓰는 메인 이유라고 할 수 있습니다. 훨씬 효율적이고 쉽게 코딩할 수 있습니다.
과학적이고 수학적 Python 기반 패키지의 수가 증가하고 있지만 대부분이 NumPy 어레이를 사용하고 있다. 입력받은 파이썬 시퀀스 입력을 지원하며, 처리하기 전에 NumPy 어레이로 변환하고 종종 NumPy Array를 출력합니다. 즉, 많은 양을 효율적으로 사용하기 위해 Python의 내장 시퀀스로는 한계가 있으므로 오늘날의 과학/수학적인 NumPy 어레이를 사용하는 방법도 알아야만 데이터사이언스, 빅데이터분석, 머신러닝, 딥러닝 등을 진행하는데 필수적입니다.
Numpy array 접근 -> a[0,0]
Python list 접근 -> b[0][0]
1. numpy array는 numpy array끼리 연산이 가능하지만 Python list는 덧셈만 가능하다.
numpy array 에 numpy array를 더해주면 같은 인덱스에 있는 값들 끼리 더해진다.
예를들어 [10, 5, 3, 7, 1, 5] + [10, 5, 3, 7, 1, 5] = [20, 10, 6, 14, 2, 10] 이런식으로 덧셈 계산을 할 수 있다.
반면 Python list에서는 두 리스트의 값들이 한 리스트로 들어간다.
예를들어 [10, 5, 3, 7, 1, 5] + [10, 5, 3, 7, 1, 5] = [10, 5, 3, 7, 1, 5, 10, 5, 3, 7, 1, 5] 이런식으로 앞의 리스트 뒤에 뒤의 리스트 값이 붙어서 한 리스트로 만들어진다.
같은 맥락으로 numpy array는 numpy array 끼리 뺄셈, 곱셈, 나눗셈이 가능하다. 같은 인덱스에 있는 값들끼리 연산해준다. Pythom list는 리스트끼리 뺄셈, 곱셈, 나눗셈을 하면 오류가 난다.
2. numpy array는 array 전체에 연산이 가능하지만 Python list는 곱셈만 가능하다.
numpy array와 숫자의 연산을 하면 array에 들어가있는 각 값에 연산이 된다.
예를들어 [10, 5, 3, 7, 1, 5] + 5 = [15, 10, 8, 12, 6, 10] 와 같이 array 안에 들어가있는 각 값에 +5가 된다.
덧셈뿐 아니라 뺄셈, 곱셈, 나눗셈 모두 우리가 예상하는 결과대로 값이 나온다.
반면 Python list는 곱셈만 가능한데 이도 array처럼 각 값에 곱을 해주는 것이 아니라 list의 요소를 반복한다.
예를들어 [10, 5, 3, 7, 1, 5] * 2 = [10, 5, 3, 7, 1, 5, 10, 5, 3, 7, 1, 5] 이런식으로 나온다.
3. numpy array가 python list에 비해 문법이 간단하고 성능이 뛰어나다.
예를들어 1억개의 요소가 있는 기본 python list에 곱하기 2를 하려면 반복문을 1억번 돌려야 하는데 numpy array는 그냥 * 2 만 붙여주면 된다. 문법이 간단할 뿐만 아니라 실제 실행했을 때도 numpy array가 훨씬 짧은 시간에 연산을 마친다.
성능차이가 나는 이유를 간단히 말하면 값들이 저장되는 방식에 차이가 있기 때문이다. python list는 다양한 자료형이 저장가능 하지만 numpy array는 같은 자료형만 넣을 수 있다. 따라서 python list는 값을 추가하고 제거하는 일에 쓰고, numpy array는 수치 계산이 많고 복잡할 때나 행렬같은 다차원 배열을 쓸 때 사용하면 된다.
* 튜플(tuple)과 딕셔너리{dictionary}
튜플(tuple)은 몇 가지 점을 제외하곤 배열이나 리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.
리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 생성하고 나면 그 값을 삭제, 변경을 할 수 없다.
단지 1개의 요소만을 가질 때는 요소 뒤에 콤마(,)를 반드시 붙여야 한다는 것과 괄호( )를 생략해도 무방하다는 점이다.
얼핏 보면 튜플과 리스트는 비슷한 역할을 하지만 프로그래밍을 할 때 튜플과 리스트는 구별해서 사용하는 것이 유리하다. 튜플과 리스트의 가장 큰 차이는 값을 변화시킬 수 있는가 여부이다. 즉 리스트의 항목 값은 변화가 가능하고 튜플의 항목 값은 변화가 불가능하다. 따라서 프로그램이 실행되는 동안 그 값이 항상 변하지 않기를 바란다거나 값이 바뀔까 걱정하고 싶지 않다면 주저하지 말고 튜플을 사용해야 한다. 이와는 반대로 수시로 그 값을 변화시켜야할 경우라면 리스트를 사용해야 한다. 실제 프로그램에서는 값이 변경되는 형태의 변수가 훨씬 많기 때문에 평균적으로 튜플보다는 리스트를 더 많이 사용한다.
튜플은 요소를 지우거나 값을 변경할려고 시도한다면 지원되지 않는다는 오류 메시지가 나온다.
사람은 누구든지 "이름" = "홍길동", "생일" = "몇 월 몇 일" 등으로 구별할 수 있다. 파이썬은 영리하게도 이러한 대응 관계를 나타낼 수 있는 자료형을 가지고 있다. 요즘 사용하는 대부분의 언어도 이러한 대응 관계를 나타내는 자료형을 갖고 있는데, 이를 연관 배열(Associative array) 또는 해시(Hash)라고 한다.
파이썬에서는 이러한 자료형을 딕셔너리(Dictionary)라고 하는데 딕셔너리 {dictionary}는 사전형태의 자료구조이며 순서가 없다 (unordered)
Key 와 Value으로 구분되며, Key를 사용하여 값에 접근 가능하다.
배열이나 튜플처럼 인덱스를 활용하여 Value 에 접근할 수 없다.
딕셔너리는 리스트나 튜플처럼 순차적으로(sequential) 혹은 인덱스로 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.
Key 를 사용하여 값을 추가, 변경, 삭제가 가능하다.
동일한 Key 자료는 존재할 수 없다.
딕셔너리에서 Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다는 점을 주의해야 한다. 동일한 Key가 2개 존재할 경우 나중에 입력된 것을 제외하고 나머지는 무시된다.
Key와 Value로 정수 값과 문자열을 넣을 수 있으며, Value에 리스트이나 듀플도 넣을 수 있다.
Key에 듀플은 넣을 수 있으나 리스트는 넣을 수 없다. 딕셔너리의 Key로 쓸 수 있느냐 없느냐는 Key가 변하는 값인지 변하지 않는 값인지에 달려 있다. 리스트는 그 값이 변할 수 있기 때문에 Key로 쓸 수 없다.
a.keys() -> 딕셔너리 a의 Key만을 모아서 dict_keys 객체를 돌려준다.
list(a.keys()) -> dict_keys 객체를 리스트로 변환
a.values() -> 딕셔너리 a의 Value만을 모아서 dict_values 객체를 돌려준다.
a.items() -> Key와 Value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다.
dict_values 객체와 dict_items 객체 역시 dict_keys 객체와 마찬가지로 리스트를 사용하는 것과 동일하게 사용할 수 있다.
a.clear() -> 딕셔너리 안의 모든 요소를 삭제. 빈 리스트를 [ ], 빈 튜플을 ( )로 표현하는 것과 마찬가지로 빈 딕셔너리도 { }로 표현됨
a.get('name') -> get(x) 함수는 x라는 Key에 대응되는 Value를 돌려준다. a.get('name')와 a['name']는 동일
다만, 존재하지 않는 키로 값을 가져오려고 할 경우 a['name']는 Key 오류를 발생시키고 a.get('name')는 None을 돌려준다는 차이가 있다.
'name' in a -> 해당 Key 'name'이 딕셔너리 a 안에 있는지 조사하기(in), True or False로 반환
리스트: list = [1, 2, 3, 4], list[0]
튜플: tup = (1,2,3,4), tup[0]
딕셔너리: dic = {"january":1, "February": 2, "March":3 }, dic["March"]
* 집합 (set)
집합은 중복되는 요소가 없는 순서 없는 컬렉션입니다. 기본적인 용도는 멤버십 검사와 중복 엔트리 제거입니다. 집합 객체는 합집합, 교집합, 차집합, 대칭 차집합과 같은 수학적인 연산들도 지원합니다.
리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다. 이는 마치 딕셔너리와 비슷하다. 딕셔너리 역시 순서가 없는 자료형이라 인덱싱을 지원하지 않는다.
만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 리스트나 튜플로 변환한후 해야 한다.
중복을 허용하지 않는 set의 특징은 자료형의 중복을 제거하기 위한 필터 역할로 종종 사용하기도 한다.
set 자료형을 정말 유용하게 사용하는 경우는 교집합, 합집합, 차집합을 구할 때이다.
1. 교집합
s1 & s2, s1.intersection(s2), s2.intersection(s1)
2. 합집합
s1 | s2, s1.union(s2), s2.union(s1)
3. 차집합
s1 - s2, s1.difference(s2)
s2 - s1, s2.difference(s1)
4. 집합에 값 추가
s1.add(4) # 값 1개 추가하기(add)
s1.update([4, 5, 6]) # 값 여러 개 추가하기(update)
s1.remove(2) # 특정 값 제거하기(remove)
* 연산자
제곱: **, ex) 3 ** 4 = 81
나눗셈 후 나머지를 반환: %, ex) 7 % 3 = 1
나눗셈 후 몫을 반환: //, ex) 7 // 3 = 2
* 문자열
1. 큰따옴표(")로 양쪽 둘러싸기
2. 작은따옴표(')로 양쪽 둘러싸기
3. 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기
4. 작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기
5. 문자열은 더해서 (+) 연결할 수 있다.
6. 문자열은 곱해서 (*) 반복시킬 수 있다.
7. 문자열 자료형은 그 요소값을 변경할 수 없다. 그래서 immutable한 자료형이라고도 부른다
* 문자열 슬라이싱 (Slicing)
a[0:4]
슬라이싱 기법으로 a[시작 번호:끝 번호]를 지정할 때 끝 번호에 해당하는 것은 포함하지 않는다.
a[0:4]을 수식으로 나타내면 다음과 같다.
0 <= a < 4
a[19:] - a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작 번호부터 그 문자열의 끝까지 뽑아낸다.
a[:17] - a[시작 번호:끝 번호]에서 시작 번호를 생략하면 문자열의 처음부터 끝 번호까지 뽑아낸다.
a[:] - a[시작 번호:끝 번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다.
a[19:-7] - 슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.
* 문자열 포매팅
"I ate %d apples. so I was sick for %s days." % (number, day)
"I ate {0} apples. so I was sick for {1} days.".format(number, day)
"I ate {number} apples. so I was sick for {day} days.".format(number=10, day=3)
"I ate {0} apples. so I was sick for {day} days.".format(10, day=3)
%s: 문자열 string
%d: 문자 1개 char
%d: 정수 int
%f: 부동소수 float
%o: 8진수
%x: 16진수
* 문자열 관련 함수들
a.count('b') -> 문자열 중 문자 b의 개수를 돌려준다.
a.find('b') -> 문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.
a.index('k') -> 문자열 중 문자 k가 맨 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시킨다. 앞의 find 함수와 다른 점은 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다는 점이다.
",".join('abcd') -> abcd 문자열의 각각의 문자 사이에 ','를 삽입한다.
join 함수는 문자열뿐만 아니라 리스트나 튜플도 입력으로 사용할 수 있다.
",".join(['a', 'b', 'c', 'd']) -> join 함수의 입력으로 리스트를 사용하는 예
a.upper() -> upper 함수는 소문자를 대문자로 바꾸어 준다. 만약 문자열이 이미 대문자라면 아무 변화도 일어나지 않을 것이다.
a.lower() -> lower 함수는 대문자를 소문자로 바꾸어 준다.
a.lstrip() -> 문자열 중 가장 왼쪽에 있는 한 칸 이상의 연속된 공백들을 모두 지운다. lstrip에서 l은 left를 의미한다.
a.rstrip() -> 문자열 중 가장 오른쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다. rstrip에서 r는 right를 의미한다.
a.strip() -> 문자열 양쪽에 있는 한 칸 이상의 연속된 공백을 모두 지운다.
a.replace("Life", "Your leg") -> replace(바뀌게 될 문자열, 바꿀 문자열)처럼 사용해서 문자열 안의 특정한 값을 다른 값으로 치환해 준다.
a.split() -> split 함수는 a.split()처럼 괄호 안에 아무 값도 넣어 주지 않으면 공백(스페이스, 탭, 엔터 등)을 기준으로 문자열을 나누어 준다. 만약 b.split(':')처럼 괄호 안에 특정 값이 있을 경우에는 괄호 안의 값을 구분자로 해서 문자열을 나누어 준다. 이렇게 나눈 값은 리스트에 하나씩 들어가게 된다.
* 리스트 연산 오류
a = [1, 2, 3]
a[2] + "hi"
-> Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
형 오류(TypeError)가 발생. a[2]에 저장된 값은 3이라는 정수인데 "hi"는 문자열이다. 정수와 문자열은 당연히 서로 더할 수 없기 때문에 형 오류가 발생한 것이다.
만약 숫자와 문자열을 더해서 '3hi'처럼 만들고 싶다면 숫자 3을 문자 '3'으로 바꾸어 주어야 한다. 다음과 같이 할 수 있다.
str(a[2]) + "hi"
str 함수는 정수나 실수를 문자열의 형태로 바꾸어 주는 파이썬의 내장 함수이다.
* 리스트 관련 함수들
a.append(4) -> a 리스트의 맨 마지막에 4를 추가하는 함수이다. 리스트 안에는 어떤 자료형도 추가할 수 있다.
a.append([5,6]) -> a 리스트의 맨 마지막에 [5,6]을 추가하는 함수이다.
a.sort() -> 숫자를 오름차순으로, 문자를 알파벳 순서로 정렬할 수 있다.
a.reverse() -> reverse 함수는 리스트를 역순으로 뒤집어 준다. 이때 리스트 요소들을 순서대로 정렬한 다음 다시 역순으로 정렬하는 것이 아니라 그저 현재의 리스트를 그대로 거꾸로 뒤집는다.
a.index(1) -> 리스트 a에 숫자 1이 처음으로 오는 위치를 반환한다. a 리스트에 존재하지 않는다면 값오류(ValueError)가 발생한다.
a.insert(0, 4) -> 리스트의 0번째 위치에 4를 삽입하는 함수이다. 파이썬에서는 숫자를 0부터 센다는 것을 반드시 기억하자.
a.remove(3) -> 리스트에서 첫 번째로 나오는 3을 삭제하는 함수이다.
a.pop() -> 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
a.pop(1) -> 리스트의 1번째 요소를 돌려주고 그 요소는 삭제한다.
a.count(1) -> 리스트 안에 1이 몇 개 있는지 조사하여 그 개수를 돌려주는 함수이다.
a.extend(b) -> extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 b 리스트를 더하게 된다. a.extend(b)는 a += b와 동일하다.
* 리스트 복사
b = a -> 리스트 a를 "복제"히여 리스트 b를 생성, 리스트의 값 뿐만 아니라 저장되는 메모리 주소도 동일, 즉 a를 바꾸면 b까지 바뀜
b = a[:] -> 리스트 a를 "복사"히여 리스트 b를 생성, 리스트의 값은 동일하지만 저장되는 메모리 주소는 다음, 즉 a를 바꾸더라도 b에 영향을 미치지 못함
b = copy(a) -> from copy import copy 필요, b = a[:]와 동일
(a, b) = 'python', 'life' -> 튜플로 a, b에 값을 대입할 수 있다. 튜플은 괄호를 생략해도 된다.
[a,b] = ['python', 'life'] -> 리스트로 변수를 만들 수도 있다.
a = b = 'python' -> 여러 개의 변수에 같은 값을 대입할 수도 있다.
>>> a = 3
>>> b = 5
>>> a, b = b, a
>>> a
5
>>> b
3
-> 위 방법을 사용하여 두 변수의 값을 아주 간단히 바꿀 수 있다.
* 조건문, 제어문
x in 리스트, 듀플, 문자열 -> 리스트, 듀플, 문자열 안에 x가 있는가 라는 조건문이다.
x not in 리스트, 듀플, 문자열 -> 리스트, 듀플, 문자열 안에 x가 없는가 라는 조건문이다.
if문을 한 줄로 작성하기
if문 다음에 수행할 문장이 한 줄이고, else문 다음에 수행할 문장도 한 줄이라면 다음과 같이 간략히 코드를 작성할 수 있다.
if 'money' in pocket:
pass
else:
print("카드를 꺼내라")
-> if 'money' in pocket: pass
else: print("카드를 꺼내라")
* 조건부 표현식 (conditional expression)
if score >= 60:
message = "success"
else:
message = "failure"
위 코드는 score가 60 이상일 경우 message에 문자열 "success"를, 아닐 경우에는 "failure"를 대입하는 코드이다.
파이썬의 조건부 표현식(conditional expression)을 사용하면 위 코드를 다음과 같이 간단히 표현할 수 있다.
-> message = "success" if score >= 60 else "failure"
조건부 표현식은 다음과 같이 정의한다.
(조건문이 참인 경우) if (조건문) else (조건문이 거짓인 경우)
조건부 표현식은 가독성에 유리하고 한 줄로 작성할 수 있어 활용성이 좋다.
* for나 while문 안의 문장을 수행할 때 입력 조건을 검사해서 조건에 맞지 않으면 break문으로 for나 while문을 빠져나간다. 그런데 프로그래밍을 하다 보면 for나 while문을 빠져나가지 않고 for나 while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶은 경우가 생기게 된다. 이때 사용하는 것이 바로 continue문이다.
* for문의 기본 구조는 다음과 같다.
for 변수 in 리스트(또는 튜플, 문자열):
수행할 문장1
수행할 문장2
for문과 함께 자주 사용하는 range 함수
for문은 숫자 리스트를 자동으로 만들어 주는 range 함수와 함께 사용하는 경우가 많다.
a = range(10) -> range(10)은 0부터 10 미만의 숫자를 포함하는 range 객체를 만들어 준다.
a = range(1, 11) -> 시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않는다.
* 리스트 내포(List comprehension)
리스트 안에 for문을 포함하는 List comprehension를 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
a = [1,2,3,4]
result = []
for num in a:
result.append(num*3)
-> a = [1,2,3,4]
result = [num*3 for num in a]
만약 [1,2,3,4] 중에서 짝수에만 3을 곱하여 담고 싶다면 다음과 같이 리스트 내포 안에 "if 조건"을 사용할 수 있다.
a = [1,2,3,4]
result = [num*3 for num in a if num % 2 == 0]
리스트 내포의 일반 문법은 다음과 같다. "if 조건" 부분은 앞의 예제에서 볼 수 있듯이 생략할 수 있다.
(표현식) for (항목) in (리스트,배열,문자열) if (조건문)
* 추천 에디터
- 비주얼 스튜디오 코드
비주얼 스튜디오 코드(Visual Studio Code)는 파이참과 더불어 프로그래머들에게 가장 많은 사랑을 받는 파이썬의 대표적인 에디터이다. 비주얼 스튜디오 코드는 공식 다운로드 사이트 (https://code.visualstudio.com)에서 내려받을 수 있다.
비주얼 스튜디오 코드는 파이썬 전용 에디터가 아니다(파이썬 외에 여러 가지 언어를 지원하는 에디터이다). 따라서 비주얼 스튜디오 코드를 설치한 후 파이썬 편집을 위해 가장 먼저 해야 할 일 은 파이썬 Extension을 설치하는 것이다. 파이썬 Extension은 비주얼 스튜디오 코드를 실행 한 후 Extension 메뉴를 사용하여 설치할 수 있다.
- 파이참
파이썬에 어느 정도 익숙해졌다면 파이참(PyCharm)을 사용해 보기를 적극 추천한다. 파이참은 가장 유명한 파이썬 에디터 중 하나로서 코드를 작성할 때 자동 완성, 문법 체크 등 편리한 기능을 많이 제공한다.
이 에디터는 파이참 공식 다운로드 사이트(http://www.jetbrains.com/pycharm/download)에서 내려 받을 수 있다.
파이참은 파이썬 전용 에디터로서 별도의 Extension이나 플러그인을 따로 설치할 필요가 없다.
<References>
최근 덧글