일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 물리학
- 오늘의 문제
- C
- css3
- 수학
- 점자
- 위키
- 프로그래밍 언어
- javascript
- html
- 선형대수학
- ┌─┐
- 리브레위키
- IT
- 자바스크립트
- Inkscape
- LaTeX
- CSS
- html5
- HTML5.
- C++
- 프로그래밍
- C언어
- 글이_점점_짧아지고_있습니다.
- python
- Nemeth Braille
- 나무위키
- matlab
- 확률
- Java
- Today
- Total
SturdyCobble's Study Note
[프로그래밍] 2.7 자료형[4] - 배열과 리스트(2) 본문
NOTICE : 독학인 만큼, 잘못된 내용이 있을 수 있습니다. 내용 지적은 언제나 환영합니다.
더 이상 이 블로그에는 글을 올리지는 않을 예정입니다. 그렇지만 댓글을 달아주시면 최대한 답변드리고자 노력하겠습니다.
※이 글은 프로그래밍 언어에 대한 기초적인 이해를 가정하고 있습니다. 최소 프로그래밍 언어 하나 정도를 약간이라도 접해보시는 것을 추천합니다. 또한, 이 글은 심화 내용은 되도록 피하여 서술했습니다.
아래 표는 이번 글의 범위입니다. (저번 글까지 포함)
C/C++ | Java | Python | |
배열(저번 글) | O | O | |
리스트 | O | O |
이번 글에서는 본격적으로 Java와 Python의 List에 대해 알아보겠습니다. 아래는 리스트를 선언하는 코드입니다.
ArrayList list01 = new Arraylist();
LinkedList list02 = new LinkedList();
list_py = [0,1,2,3,4,5]
Java에서는 여러가지 종류의 List를 지원하며, 대표적인 두 개만 나타내보았습니다. 또한, 배열과 같이 초기화하는 것이 불가능합니다. Python의 경우 대괄호 [ ]를 사용하며, 다른 언어의 배열과 사용 방법이 매우 유사합니다.
만약 Java에서 리스트를 초기화하고 싶다면, 배열을 리스트로 변환시키거나 선언과 함께 원소들을 추가해주는 방법을 생각해볼 수 있습니다. 이 부분에 대해서는 생략하겠습니다.
리스트의 장점은 자유롭게 원소들을 추가하고 제거할 수 있다는 점입니다. 간단하게 생각해 볼 수 있는 동작은 '추가하기', '지우기', '특정 인덱스의 값 알아내기', '길이 구하기' 등이 있습니다. 이러한 동작들은 Java와 Python에서 다음과 같이 수행됩니다.
ArrayList list101 = new ArrayList();
list101.add("Add to the end"); //마지막에 추가
list101.add(0,"Add to 0th index"); //특정 인덱스 자리에 추가
element01 = list101.get(1); //인덱스 1인 원소의 값 얻어옴
System.out.println(list101.contains("Hello")); //contains로 "Hello"의 포함 여부 확인
System.out.println(list101.size()); //리스트의 크기(길이)
list101.remove(1); //인덱스 1인 원소 삭제
list101.remove("Add to 0th index")); // "Add to 0th index" 삭제(첫번째로 나오는 것을 삭제)
list101 = []
list101.append("Add to the end") //마지막에 추가
list101.insert(0,"Add to 0th index") //특정 인덱스 자리에 추가
element01 = list101[1] //인덱스 1인 원소의 값 얻어옴
print(list101.count("Hello")) //count로 "Hello"의 포함 갯수 출력
print(len(list101)) //리스트의 크기(길이)
print(list101.pop(1)) //인덱스 1인 원소 삭제(인덱스 생략 맨 마지막) 후 삭제한 값 출력
list101.remove("Add to 0th index")); // "Add to 0th index" 삭제(첫번째로 나오는 것을 삭제)
만약, 리스트 두개를 이어 붙인다면, Java와 Python에서는 다음과 같은 코드를 이용할 수 있습니다. (아래 제시된 list01과 list02가 리스트로서 사전에 정의되었다고 가정해봅시다)
list01.addAll(list02);
--------------------------방법1---------
list01.extend(list02)
--------------------------방법2---------
list01 = list01 + list02
참고로 Java의 경우에는 리스트에 담는 데이터의 자료형을 명시해주는 것이 좋습니다. 만약 이렇게 지정한다면, 잘못된 값을 넣었을 때 오류를 출력하므로 프로그램의 오류를 빨리 캐치해내는데 도움이 되겠죠?
Arraylist<String> strList01 = new ArrayList();
이렇게 < >안에 타입을 지정하는 것을 제너릭스(Generics)라고 하지만, 관련 사항은 여기서 깊이 다루지는 않겠습니다.
이때 <>안에 오는 자료형은 Primitive(기본형)이 아닌 객체 형태여야 합니다. 즉 int는 불가능합니다.(대신 Integer를 쓰면 됩니다. 이 경우 Integer는 int와는 다르게 객체 형태입니다. 이러한 자료형을 Wrapper Class라고 부릅니다. 이에 관해서는 나중에 다시 다루겠습니다. 이 형태의 경우 바로 연산하는 것은 불가능합니다.)
Python의 경우 List에 관한 여러가지 도구들을 사용할 수 있지만, (정렬 등) 여기서는 생략하도록 하겠습니다.
Python에는 다음과 같이 리스트나 문자열을 슬라이싱하는 독특한 문법이 존재합니다.
list01 = [0,1,2,3,4,5,6,7,8,9,10]
print(list01[2:4])
print(list01[1:10:2])
print(list01[::-1])
위 코드의 실행 결과는 다음과 같습니다.
[2, 3]
[1, 3, 5, 7, 9]
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
(Python의 print는 리스트도 위와 같은 형식으로 자동으로 출력할 수 있습니다.)
좀더 구체적으로 알아보자면, 콜론(:)으로 구분된 첫번째 숫자는 시작 위치(인덱스), 두번째 숫자는 끝나는 위치로 시작 위치부터 끝나는 위치 바로 전까지의 리스트를 나타냅니다. 세번째 숫자는 간격으로서 몇 칸씩 건너뛰어가며 읽을지를 나타냅니다.
인덱스에서 음수는 뒤에서 부터 셈을 나타내며, 결국 아래와 같은 예시도 가능합니다.
list01 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list01[-1:2:-2])
----------------출력 결과---------------
[10, 8, 6, 4]
(간격이 음수이므로 시작 위치가 끝나는 위치보다 앞에 위치해있습니다.)
한편, C언어에서 리스트를 구현하려면 지금까지 배운 내용으로는 부족합니다. C++로 리스트를 사용하기 위해서는 list 헤더 파일을 포함하여 다음과 같이 코드를 작성할 수 있습니다.
다만, C와 C++을 같이 쓰는 경우가 많고, 위에 소개된 다른 언어만큼 간단하게 활용할 수 있는 것이 아니라 제외하였습니다. 아래는 C++에서 list를 생성하고 몇 개의 원소를 집어넣고 제거하는 예시입니다.
#include<iostream>
#include<list>
using namespace std;
int main(){
list<int> list01;
list01.push_back(0);
list01.push_back(1);
list01.pop_back();
return 0;
}
'휴지통 > ['19.06-'20.07]프로그래밍101' 카테고리의 다른 글
[프로그래밍] 3.1 제어문(1) - if문 (0) | 2019.08.03 |
---|---|
[프로그래밍] 2.8 주석(Comment) (0) | 2019.08.03 |
[프로그래밍] 2.6 자료형[3] - 배열과 리스트(1) (0) | 2019.07.28 |
[프로그래밍] 2.5 기본 입출력(2) (0) | 2019.07.15 |
[프로그래밍] 참고 자료 목록 (0) | 2019.07.14 |