python은 모두 포인터로 이뤄져있다.
그래서 list a= [1,"hi"]같이 int형, String형 데이터타입을 한 곳에 넣을 수 있다.
왜냐하면 모두 포인터로 이뤄져 있어 같은 크기를 가지기 때문에 가능하다.
하지만 정말 특별한 경우가 아니면 동일한 데이터만 넣고 만들자.
List_ 내부 데이터 변경이 가능한 데이터의 연속적인 모임
- 데이터를 입력 순서대로 저장하는 자료형
- 내부데이터를 변경할 수 있고 크기도 변경 가능
- 시퀀스 자료형
1. 생성
1) 변수명 = [ 데이터 나열 ]
2) 변수명= 값.. .... 값에는 ragne(),튜플,list의 일부분 등이 들어갈 수 있다.
ex1) 중첩 리스트 : a = [4,5,6] b = [1,2,3,a] - 선생님께서 비추천하셨음. 금기시하라고.
2. 접근
1) 변수명[인덱스]
2) 변수명[시작위치:종료위치]
3. 삭제
1) 1개 지우기
del 변수명[인덱스]
2) 여러개 지우기(일정 범위에 빈 값을 덮어쓰는 원리)
변수명[시작위치:종료위치] = [ ]
** 연속해서 삭제할 때는 뒤에것부터 삭제하던가 아니면 지울 때 인덱스를 1씩 감소하며 삭제해야함. 이유는 알겠지?
** 일정 간격이 있으면 5번 슬라이싱을 이용해도 됨.
4. 중간에 삽입
1) 변수명[위치:위치] = 데이터
*위치값은 같은 수를 넣어줘야 함.
5. 슬라이싱
변수명[시작위치 : 종료위치 : 간격]
*값이 없을경우 시작위치는 0, 종료위치는 마지막위치, 간격은 1로 간주함.
ex) 1~4번째 [1:5:1]
ex) 0~3번째 [0:4:1]
ex) 짝수번째 [ : : 2]
6. for-each( = fast enumeration)
for 임시변수 in list변수명 : 내용
* len(변수) : 포함된 데이터 갯수 리턴
** len 메서드를 사용해 for문을 돌리게 된다면 좋지않다. 왜냐하면 메서드를 for문의 조건만큼 호출하기 때문에 다른 데이터 영역(메서드가 있는 영역- 변하지 않는 영역..)에 그만큼 가야 하기 때문이다. 이때에는 for-each문을 사용해주는것이 훨씬 좋다.
7. List 메소드
-append(값) : 마지막에 데이터 추가
-insert(인덱스,데이터) : 인덱스 위치에 데이터 삽입(데이터가 밀려나므로 데이터가 많을 시 많은 시간 소요)
-index(데이터) : 데이터의 위치 검색
-count() : 요소의 개수 리턴
-sort() : 리스트를 정렬 .....
*sort(reverse=True) : 역순으로 정렬
*sort(key=함수이름) : 함수를 수행한 결과를 가지고 정렬(직접적인 데이터 변화는 없다)
ex)list.sort(key=str.lower) : 리스트 데이터를 소문자로 변환 후 정렬한다. (실제 데이터는 소문자로 바뀌지 않는다)
-reverse() : 순서 뒤집기
-remove(데이터) : 데이터의 첫번째 것을 삭제
-pop(인덱스) :데이터를 삭제하고 꺼내옴
-extend(리스트) : 리스트를 추가
Stack_리스트는 스택으로 사용할 수 있게 설계되었다
- LIFO구조(Last in First out)의 메모리
- 데이터를 삽입하는 연산을 push, 꺼내는 것을 pop이라고 함.
- push연산은 append()를 pop연산은 pop()메소드를 이용하면 된다.
Queue_큐 역시 리스트로 구현할 수 있다
- FIFO구조(First in First out)의 메모리
- 데이터 삽입 연산은 append(데이터) 꺼내는 연산은 pop(0)을 이용한다.
Tuble_변경되지 않는 데이터의 연속적인 모임(변경되지 않는 List)
* 따로 공부하지 않아도 되는데, 생성같은것만 제외하면 List와 같다.
1. 생성
변수명 = (데이터나열)
---
짤막하게 파이썬 함수 선언방법
def 함수명(매개변수) :
return len(s)