스터디 그룹/ProjectH4C

ProjectH4C 1개월 2주차 과제 (UNIT 22) : 밑은 꽤 중요함

📖 UNIT 22. 리스트와 튜플 응용하기

📒리스트에 요소 추가하기

대표적인 리스트를 다루는 기능 세개를 알아보자.

  • append : 요소 하나를 추가
  • extend : 리스트를 연결하여 확장
  • insert : 특정 인덱스에 요소 추가

정도 있다. 

 

먼저 리스트에 요소 하나를 추가해보자.

a = [10, 20, 30, 40]
a.append(100)

이 결과를 확인해보도록 하자.

리스트에 100이 들어가짐을 확인할 수 있다. 그럼 길이를 알아보자.

len 함수를 이용하여 길이를 구할 수 있다. 마지막 인덱스는 len(a)-1 이겠다.

리스트 안에는 리스트를 또 추가할 수 있다.

a = [10, 20, 30, 40, 100]
a.append([500,600])

이렇게 리스트 안에 리스트가 또 들어가짐을 확인할 수 있다.

리스트안의 리스트도 하나의 요소로만 판단을 한다. 그래서 len 함수를 사용하여도 요소의 갯수로만 판단이 된다.

 

리스트는 확장할 수도 있다.

리스트에 여러개의 요소들을 넣고 싶다면, append()함수를 여러번 사용하여도 되지만 그 갯수가 많아진다면 매우 번거로워진다는 단점이 있다. 이를 해결하기 위해 여러 요소들을 한번에 넣을 수 있는 extend()함수가 존재한다.

a = [10, 20, 30]
a.extend([500,600])

이 코드를 실행해보자.

 

예상한대로 출력이 된다. 인자로 넘긴 리스트는, 그 안의 요소들만 a리스트에 추가되었다. 한 개씩 추가된것이 아니라 함수명이 extend이지 않을까 조심스레 유추해볼 수 있다. append와 마찬가지로 리스트도 추가시킬 수 있다.

 

리스트의 특정 인덱스에 요소를 추가시킬 수 있다.

 

a = [10, 20, 30]
a.insert(2, 500)

이 코드를 실행시키면 idx=2인 30의 위치에 500이 들어가지고 30은 다음으로 밀려나간다

 

딩동댕동 !!@!@!@!2

 

리스트안에 리스트를 위와 같이 insert하는 것도 가능하다.

 

리스트의 특정한 요소를 없애기도 가능하다.

📒리스트에 요소 제거하기

  • pop : 특정 인덱스 또는 마지막 요소 제거
  • remove : 특정 값을 찾아서 제거

리스트에서 특정 인덱스를 찾아 제거해보자.

 

a = [10, 20, 30]
a.pop()

위 명령을 실행해보자.

위와같이 출력된다. pop을 실행하게 되면 가장 마지막 요소가 뭔지 알려주고, 사라진다.

pop에 인자를 넣어주면, 그 인덱스에 해당하는 값이 사라지게 된다. pop대신 del을 사용해도 된다.

a = [10, 20, 30]
del a[1]

위와 같이 코딩할 수도 있다.

 

리스트에서 특정 값을 찾아 제거헤보자.

a = [10, 20, 30, 40]
a.remove(20)

 

 

위와 같이 코딩한다면 리스트에서 20이라는 값을 찾아서 지운다. 만약 리스트에 20이 두개가 있다고 하더라도, 가장 먼저 찾은 20이라는 값을 제거한다.

 

이러한 특징을 이용하여 리스트로 스택과 큐를 구현할 수도 있다. 

 

이정도로 마무리하자.

 

📒기타

이외에도 파이썬에서 유용하게 쓰이는 함수를 찾아보자

 

  • 특정값의 인덱스를 구한다 : a.index()
  • 특정값의 갯수를 구한다 : a.count()
  • 순서를 뒤집는다 : a.reverse()
  • 요소 정렬하기 : a.sort(reverse=False) : 오름차순
  • 모든 요소 삭제 : a.clear()

📒리스트의 할당과 복사 알아보기 ( 꽤 중요한 내용임 !!!!! )

할당과 복사의 차이가 뭘까 .....

a = [1, 2, 3, 4, 5]
b = a
b[1] = 20

이런 코드가 있다고 해보자. a와 b는 서로 독립적인 관계일까 ?

즉, b에서 값을 바꾸면 그것이 a에도 영향이 갈까 ? (양자얽힘과 비슷한 개념인가 ㅎㅎ)

결론적으로 말하자면, 얽혀있다. 우리가 단순히 b=a 코드를 작성하면 b에서 이루어지는 작업들은 모두 a에도 영향을 미친다.

a와 b의 id는 같다. 그말은 즉 b=a를 해버리면 b는 그냥 a의 id값을 가져가는 것이다.

 

리스트가 아닌 일반 변수의 경우에는 b의 값을 바꾸었을 때 그 얽힘이 깨지게 된다.

아마 리스트의 경우 요소를 바꾸더라도 전체적으로는 a를 참조했지만, 그런게 아닌 경우 아예 다른 값이 되어버리기 때문인 것 같다.

 

그럼 a와 독립된 b를 만들기 위해서 어떻게 해야 할까. 바로 copy 메서드를 사용해야 한다.

 

a = [1,2,3,4,5]
b = a.copy()
a is b

요 코드를 실행해보자

 

False가 출력된다. 즉 복사된 요소들은 같지만 아예 다른 리스트로 만들어졌다는 소리이다.


📒숫자놀이

  • 최솟값 : min(a)
  • 최댓값 : max(a)
  • 합계 : sum(a)

📒리스트에 map 사용하기

a에 모든 요소를 int로 바구고 싶다면 map을 사용하자.

a = [1.1, 2.2, 3.3, 4.4, 5.5]
a = list(map(int, a))

위와 같은 방법이면 a내의 모든 요소들을 정수로 변환해준다.

 

응용해보자.

a, b = map(int, input().split())

위와 같이 코드를 작성하게 된다면 띄어쓰기로 구분하여 입력한 두 숫자가 각각 a와 b에 들어가게 될 것이다.


📒튜플

리스트와 같으므로 생략.