본문 바로가기
AI 공부/파이썬

파이썬 (연산자를 이용한 리스트)

by AI Sonny 2022. 7. 22.
728x90

리스트는 리스트끼리 합치는 것이 가능하고, 리스트를 추가할 수 있다.

 

그러나 리스트 이것을 한다고 해서 원본 데이터가 수정되는 것은 아니다.

 

즉, 원본 데이터를 수정할 수 없다는 말과 같다.

 

list1 = [1,2,3]
list2 = [4,5,6]

list1 + list2 # 나중에 자동으로 사라진다. (extend와 동일)

 

리스트는 in 과 not in을 사용해 True, False 나타낼 수 있다.

 

 예를 들면 다음과 같다.

 
list1 == [1,2,3]  # 각 인덱스 위치에 맞는 요소의 값을 검사한다.
=> True

is 연산자와 is not 연산자

이것은 주로 같은 객체인지 아닌지를 검사하는 것으로 어떠한 연산결과로 나온 변수의 값이 True인지 Fasle인지와

 

None값을 체크할 때 주로 is 와 is not 연산자를 사용한다.

lst = [1,2,3]

lst is [1,2,3]

=> False

들어가기전 [ ], ( ), { }에 대하여 내가 정리를 해놓은 것이 있다.

 

이것을 참고한 후 글을 읽으시면 이해하기 쉬울 것이다.

 

[ 배열 ], ( 튜플 ), { 딕셔너리 }의 차이점과 사용법

이번 게시물은 내가 수업을 들으면서 개인적으로 헷갈리고, 정확히 집고 넘어가고 싶어서 정리하는 것이다. [ ] 의 사용 [ ] 은 대표적으로 배열을 나타내기 위한 것이라고 보면 된다. 주로 배열

ai-sonny.tistory.com


Tuple이란?

  • Sequence 자료형
  • Immutable 자료형 (수정 X)
  • 중복데이터 저장 가능
  • ( ) 를 활용해서 만들 수 있다. (소괄호 생략 가능)
tuples = "h","e","l","l","o"
tuples

=> ('h','e','l','l','o')

튜플은 주로 프로그램이 실행되는 동안 튜플은 안에 있는 요소들이 변경이 일어나면 안되는 경우 사용되고,

 

리스트보다 메모리를 적게 차지하여 속도가 더 빠르다는 특징이 있다.


Set이란?

  • Non-Sequence 자료형
  • 데이터의 저장의 순서를 보장하지 않는다.
    • 인덱싱과 슬라이싱 지원하지 않는다.
  • mutable 자료형
  • 중요한 특징으로 중복 데이터 저장 허용 X
  • { } 중괄호를 이용해서 만들 수 있다.
sets = {1001,1001,1001,1001,1001,1004,1004,1004,1004,11,22,44,56,100}
sets

=> {11, 22, 44, 56, 100, 1001, 1004}

set은 순서를 보장하지 않기 때문에 set[0]과 같이 인덱스를 호출하면 오류가 뜬다. 

 

더하거나 곱하기 연산자는 의미가 없기 때문에 지원을 안한다.

 

그러나 in 연산자와 not in 연산자는 지원된다.

set객체의 메소드 종류

- 교집합

A = {1,2,3}
B = {2,3,4}
A,B

A.intersection(B)   # 교집합

=> {2, 3}

- 합집합

A.union(B)  # 합집합

=> {1, 2, 3, 4}

- 차집합

A.difference(B) # 차집합

=> {1}

- 값을 추가할 때

a = {1,2,3}
a.add(100)  # 하나의 값을 추가하고 싶을 때
a

=> {1, 2, 3, 100}

- 여러 값을 추가할 때

a.update([1,2,3,4,5,6,7,8,9,10,100])    # 여러값을 추가하고 싶을 때 (중복값은 안된다.)
a

=> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 100}

- 특정 값을 제거할 때

a.remove(100)   # 특정 값을 제거하고 싶을 때
a

=> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

dict (Dictionary)이란?

  • Non-Sequence 자료형
  • mutable 자료형
  • key-value 구조로 되어있다.
  • key 중복 X
  • value 중복 O

- 딕셔너리의 구조

city = {                # set,list,tuple도 이런 형식으로 작성할 수 있지만 하지 않음
    "한국" : "부산",
    "일본" : "교토",
    "캐나다" : "오타와"
}
city

dict 의 값을 가져올 때는 key 값을 활용한다. 그리고 없는 key를 가져오라하면 에러가 발생한다.

city["한국"]  

=> '부산'

- get 이용

city.get("중국","없음")    
# 중국이라는 키가 없을경우 없음이라는 문자열로 반환해라 (에러가 안난다.)

- 딕셔너리 value 추가 

city["중국"] = "베이징" # 중국 key가 없으니 key와 value 가 추가된다.
city

=> {'미국': '워싱턴', '중국': '베이징', '캐나다': '오타와', '한국': '부산'}

- 딕셔너리 value 수정

city["일본"] = "도꾜"   # key가 있어서 해당 key 에 해당되는 value가 수정된다.
city

=> {'미국': '워싱턴', '일본': '도꾜', '중국': '상하이', '캐나다': '오타와', '한국': '부산'}

- 딕셔너리 업데이트

add_city = {"중국" : "상하이", "미국" : "워싱턴"}
city.update(add_city)   # update 함수는 여러개의 key와 value 를 수정하거나 추가하고 싶을 때 사용
city

=> {'미국': '워싱턴', '중국': '상하이', '캐나다': '오타와', '한국': '부산'}

- 딕셔너리 삭제

del city["일본"] # key 가 "일본" 인 key와 value 쌍을 삭제하겠다.
city

=> {'미국': '워싱턴', '중국': '상하이', '캐나다': '오타와', '한국': '부산'}

- 딕셔너리 pop

print(city.pop("중국")) 
# 삭제를 하고자하는 key를 넣어서 삭제할 수 있다. 해당 key의 value가 반환된다.
city
=>	상하이
	{'미국': '워싱턴', '캐나다': '오타와', '한국': '부산'}

- 딕셔너리 보기 방식

딕셔너리는 내가 어떻게 나누냐에 따라서 데이터를 분류할 수 있다.


예시는 다음과 같다.

city.keys() # dict 내의 전체 키를 확인 할 수 있다.
=> dict_keys(['한국', '캐나다', '미국'])

city.values()   # dict 내의 전체 value 를 확인할 수 있다.
dict_values(['부산', '오타와', '워싱턴'])

city.items()    # dict 내의 전체 key, value 를 확인할 수 있다.
dict_items([('한국', '부산'), ('캐나다', '오타와'), ('미국', '워싱턴')])

"한국" in  city.keys()   # 내 생각 => city in ["한국"] city가 한국안에 있냐는 뜻!

마지막 줄 코딩에서 헷갈렸던 것이 있다.

 

나는 in 함수 뒤에 값이 들어가는 줄 알았는데 그게 아니였었다.

 

그리고 딕셔너리에서 True를 넣어도 성립이 되는지 궁금해 넣어보았더니 성립이 되어 신기하였다.


컬렉션 자료형 변환

컬렉션 자료형 변환은 list에서 tuple로 tuple에서 set으로 set에서 dict로 서로 변환하는 것이다.

 

이것을 잘 사용하면 많은 데이터를 처리하는데 수월해질 것 같다.

 

예를 들어 내가 튜플에서 중복된 데이터를 제거하고 싶으면 set 함수를 이용하여 중복된 데이터 제거한 후

 

dict형태로 바꿔 데이터를 가공시킬 수 있는 것이다.


강사님이 문제를 하나 내주셨는데 처음으로 제출하지 못했다.

 

그 문제는 mean의 키를 avg로 변경하는 것이었다.

 

mean_dict = {
    "mean" : 80,
    "std"  : 3.5,
}
mean_dict

 

나는 처음에 mean_dict.pop("mean")을 이용해서 mean을 없앤 후 update를 통해 값을 넣었다.

 

그러나 강사님의 풀이를 보고, 나는 아직 부족하다고 느껴졌다.

 

 

mean_dict["avg"] = mean_dict.pop("mean")
mean_dict

=> {'avg': 80, 'std': 3.5}

 

정답은 위와 같았고, 너무나도 간단했었다. 코딩이라는 것이 정말 간단해야 좋은 코딩이라는 것을 느끼게 되었다.

728x90

댓글