관리 메뉴

IT journey

Python-자료형(리스트,튜플) 본문

개인공부공간/Python

Python-자료형(리스트,튜플)

step 2021. 5. 22. 20:19
728x90
반응형

직접 내용 정리하고 만든 예이니 퍼가실 때는 출처를 남겨주세요:)


리스트

 

정의

여러 개의 데이터를 한 번에 보관할 수 있는 자료형을 '리스트'라고 합니다.

 

빈 리스트를 만드는 방법

list1 = [] 

#리스트를 만드는 방법은 대괄호를 감싸주고 각 요소 값들은 쉼표(,)로 구분해주면 됩니다.
#그 예는 아래와 같습니다.
a=[1,2,3,4]

range를 사용하여 리스트 만들기

만드는 방법은 리스트 = list(range(횟수))입니다.

range는 정수들로 구성된 리스트를 만드는 함수라 볼 수 있습니다.

a=list(range(10)) #0부터 9까지 생성
a

range를 사용하여 리스트에서 시작하는 숫자와 끝나는 숫자 지정하기

만드는 방법은 리스트= list(range(시작,끝)) 입니다.

a=list(range(4,10))
a

참고로, 증가폭을 추가해서 만들 수도 있습니다.

리스트=list(range(시작,끝,증가폭)) #증가폭 대신 감소폭도 가능합니다.

b=list(range(-4,5,1))
b

 

리스트에 들어가는 자료형

여러 가지 자료형(문자열, 정수, 실수, 불린,리스트...)들을 다 저장할 수 있으며 섞어서 저장해도 됩니다.

 

리스트 연산

(1) + : 리스트 끼리 연결됩니다.

(2) * : 리스트명 * 반복할 횟수(정수)

(3) 나눗셈과 뺄셈은 할 수 없습니다.

#리스트 자료형을 더한 예
[1,2]+[4,5]

#리스트 자료형을 곱한 예
[1,2]*3

 

리스트의 인덱싱과 슬라이싱

(1) 인덱싱

앞서 작성했던 문자열처럼 인덱싱을 적용할 수 있습니다.

되짚어보면 , '파이썬은 0부터 센다.'와 '음수일 때는 뒤에서부터 차례대로 센다.'를 기억하시면 쉽게 이해하실 수 있습니다.😉

아래 코드를 보시면 아시겠지만 리스트안에 리스트가 있는 것을 보고 놀래실텐데요. 이럴땐 놀라지 말고 똑같이 인덱싱을 적용한다고

생각해주시면 쉽게 이해할 수 있을 겁니다.😊

a=['IT','journey']
a[0] 
a[-1]

a=['IT','journey',['with','Python']]
a[2] #a[-1] 동일한 의미
a[2][1] 

 

(2) 슬라이싱

앞서 작성했던 문자열처럼 슬라이싱을 적용할 수 있습니다.

사용하는 방법은 리스트명[시작:끝] 입니다. 이 때, 끝은 포함하지 않는다는 것을 기억하시면 더 쉽게 이해하실 수 있습니다.😊

a=[1,2,3,4,0,5,2]
a[4:6] #a[4:-1]와 같은 의미

a=[1,2,3,4,0,[1,2]]
a[5][0:2] #[1, 2] 출력

 

 

리스트에서 값 수정하기

인덱싱과 슬라이싱에다 대입해서 수정이 가능합니다.

a=[2,4,6]
a[2]=8
a

 

리스트 할당하기

a=[2,4,6]
b = a
a is b   
b[2]=8 #리스트의 요소를 변경하면 a,b 모두 반영됩니다.
a
b

 

내장함수

append(데이터)

리스트에 요소를 추가하는 함수입니다. 리스트이므로 당연히 어떤 자료형이라도 추가 가능합니다. 👌

a=[1,2,3]
a.append(5)
a

sorted(데이터)

정렬을 하여 그 결과를 보여줄 뿐 원래 리스트의 순서는 바꾸지 않습니다. 🙅‍♀️

참고로, 숫자, 알파벳 대문자, 알파벳 소문자 순으로 정렬해서 보여줍니다.

a=[1,2,8,3,4]
sorted(a) #오름차순
sorted(a,reverse=True) #내림차순
a

참고로, 원래 리스트의 순서를 바꾸어주는 함수 있습니다. 과연 그 함수는 뭘까요?🤷‍♀️ 

네, 아래를 보시면 아시겠지면 sort()라는 함수입니다.

sort()

a=[1,2,8,3,4]
a.sort() #오름차순
a


a=[1,2,8,3,4]
a.sort(reverse=True) #내림차순
a

remove(value)

이 함수는 값을 지우는 함수입니다. 중복되는 값이 있으면 앞에서부터 삭제가 들어갑니다. 

아주 만약 없는 데이터를 찾게 되면 ValueError 가 뜨게 됩니다.

a=[1,2,3,4,2,1,2,2]
a.remove(2)
a

insert(index,value)

이 함수는 원하는 위치(index)에 값(value)을 추가할 수 있는 함수입니다.

a=[1,2,5]
a.insert(1,1.3) # 맨 끝에 요소 추가 시 :a.insert(len(a), 400)
#맨 처음에 요소 추가 시 a.insert(0,400)
a

pop(index)

리스트의 맨 마지막 요소를 돌려 주고 그 요소는 삭제하는 함수입니다.

a=[1,2,3,4,5,6]
a.pop()
a

len(리스트명)

리스트 길이를 구하는 함수입니다.

len([1,2,3,4,5,6])

index(value)

리스트에 x라는 값이 있으면 x의 위치값을 리턴하는 함수입니다. 

만약 x라는 값이 없다면 ValueEroor 발생합니다.

a=[1,2,6]
a.index(6)

#중복적인 데이터를 찾고싶다면 리스트명.index(value,start) 을 입력하면 됩니다.

count()

리스트에 포함된 요소의 개수를 세는 함수입니다.

a=[2,4,6,2]
a.count(2)

리스트 확장(extend)

a = [1,2,3]
#extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.
#+연산자 보다 성능이 좋습니다.
#이 의미는 a+=[4,5]와 같은 의미입니다.
a.extend([4,5])
a

reverse() 

리스트를 역순으로 뒤집어주는 함수입니다.

a =[1,3,2]
a.reverse()
a

split()

문자열을 리스트로 바꾸어 주는 함수입니다.

words="Orange ice cream"
words_list=words.split()
words_list

join()

리스트를 문자열로 바꾸어 주는 함수입니다.

S=['Never','say','never']
' '.join(S) #'문자열이나 원하는 기호'.join(리스트)

del()

리스트를 삭제해주는 함수입니다.

a=[6,7,8,9,10,11,12]
del a[1] #리스트명[index] #각각 공간 지움
del a[2:4]
del a #전체적 지움
a #a 에러

copy()

리스트를 복사해주는 함수입니다. 

a = [2, 4, 8]
b = a.copy()#리스트 a의 모든 요소가 b에 복사됩니다.

a와 b를 is 연산자로 비교하면 False가 나옵니다. 다시 말해, 다른 객체라는 것입니다.

하지만 복사된 요소는 모두 같아 == 로 비교하게 되면 True가 나옵니다. 


튜플

튜플은 리스트와 사용법이 같습니다.  그러다보니 여러 자료형을 넣을 수 있습니다.

하지만 다른 점이 아래 표와 같이 생깁니다.

  리스트 튜플
요소값을 지우거나 변경(del 함수) 가능 불가능
만들 때 사용하는 괄호 [] () 나 콤마로 표시

튜플을 쉽게 생각하면 읽기 전용 리스트라 볼 수 있습니다.

참고로, 문자열도 요소값을 변경할 수 없습니다.

 

range를 사용하여 튜플 만들기

만드는 방법은 튜플 = tupe(range(횟수))입니다.

a=tuple(range(5)) #0부터 4까지
a

range를 사용하여 리스트에서 시작하는 숫자와 끝나는 숫자 지정하기

만드는 방법은 튜플 = tupe(range(시작,끝))입니다.

a=tuple(range(2,6))
a

참고로, 증가폭을 추가해서 만들 수도 있습니다. 

튜플 = tuple(range(시작, 끝, 증가폭)) #이때 증가폭 대신 감소폭도 가능합니다.

a=tuple(range(2,6,2))
a

 

빈 튜플 만드는 방법

a = ()
a

#소괄호()로 감싸주고 각 요소 값들은 쉼표(,)로 구분해 줍니다
a=(1,2,3)
a
ab = (1,2,("ab","cd"))
ab

#요소가 한 개 들어있는 튜플 만들기
#튜플 = (값, ) 또는 튜플 = 값,

 

튜플 연산

(1) + : 리스트 끼리 연결됩니다.

(2) * : 리스트명 * 반복할 횟수(정수)

(3) 나눗셈과 뺄셈은 할 수 없습니다.

a=(1,2,3)
b=(4,5,6)
a+b #+의 예
a*3 #*의 예

 

튜플의 인덱싱과 슬라이싱

(1)인덱싱

a=("Python","C","IT","journey")
a[0]
'Python'

 

(2)슬라이싱

a=("Python","C","IT","journey")
a[1:3]

 

내장함수

count(데이터)

튜플에 포함된 요소의 개수를 세는 함수입니다.

a=("Python","C","IT","journey",1,"journey")
a.count("journey")

index()

튜플에 x라는 값이 있으면 x의 위치값을 리턴하는 함수입니다.

만약 x라는 값이 없다면 ValueEroor가 발생합니다.

a=("Python","C","IT","journey",1,"journey")
a.index("C")
#중복적인 데이터를 찾으려면? 튜플명.index(value,start)

len(튜플 명)

튜플 길이를 구하는 함수입니다.

a=("Python","C","IT","journey",1,"journey")
len(a)

 

위에 배운 것들을 가지고 응용해본 예입니다.

#튜플
a=(2,5,6,-32,1,5,8)
print(a[1:len(a):2]) #(5, -32, 5)

#리스트
a=[2,5,6,-32,1,5,8]
print(a[1:len(a):2]) #[5, -32, 5]

id(튜플 명)

이 함수는 고유주소 값을 알려줍니다. 

a= (1,2,3)
id(a) #처음 고유주소 값
a = a+ (4,)
a
id(a) #나중 고유주소 값
#처음 고유주소 값과 나중 고유주소 값은 다릅니다.

 

튜플을 추가하고 싶을 때는 아래와 같이 해야합니다.

a=(5,6,7)
a=a+(4,)
a

형변환

본론을 말하기 앞서 우선, 전날 정리했던 자료형(숫자형,문자형,불린형) 앞 초반부 형변환을 다시 살펴봅시다. 😊

2021.05.21 - [개인공부공간/Python] - Python - 자료형 (숫자형,문자열,불린형)

 

Python - 자료형 (숫자형,문자열,불린형)

직접 내용 정리한 내용이니 퍼가실 때는 출처 부탁드려요 :) 형변환 데이터의 형태를 변환합니다. str(데이터) : 문자열로 변환합니다. int(데이터) : 정수로 변환합니다. float(데이터) : 실수로 변

step-journey.tistory.com

str(데이터)처럼 리스트를 튜플로 튜플을 리스트로 변경이 가능하면 좋을 꺼라 생각이 드실겁니다.

앞을 꼼꼼히 보며 따라오신 분들이시면 기억하실겁니다.

그 내용은 바로 튜플은 변경이 불가능하나 리스트로 만들면 변경이 가능하다는 것입니다.

list((1,2,3)) #튜플을 리스트로

tuple([1,2,3]) #리스트를 튜플로

위 코드를 실행해보시면 아시겠지만 저희의 바람대로 돌아갈 뿐만 아니라 변경도 가능합니다. 😊

 

아래는 참고사항입니다.

list와 tuple 안에 문자열을 넣기

list('Step')

tuple('Step')

 

리스트와 튜플로 변수 만들기

a,b,c=[2,3,4]
print(a,b,c)

a,b,c=(2,3,4)
print(a,b,c)

 


시퀀스 자료형(sequence types)

(1)의미

연속적으로 이어진 자료형을 의미합니다. 

(2)예

리스트, 튜플, 문자형이 있습니다.
(3)가장 큰 특징

공통된 동작과 기능을 제공합니다.

(4)용어 정리

시퀀스 자료형으로 만든 객체를 '시퀀스 객체'라고 부릅니다.

시퀀스 객체에 들어있는 각 값을 '요소(element)'라고 부릅니다.
(5)특정 값이 있는지 확인하기

특정 값이 있으면 True가 없으면 False가 나옵니다.

a=(1,2,3,4,100)
3 in a
30 in a

특정 값이 있는지 확인할 수 있다는 것은 없는지도 확인할 수 있을 꺼 같지 않나요?😉

네, 확인할 수 있습니다. 이 때는 값이 없다면 True를, 있다면 False가 나옵니다.

a=(1,2,3,4,100)
3 not in a
30 not in a

시퀀스 객체의 예들을 지금 튜플에만 적용해보았지만, 문자열,리스트에도 활용해볼 수 있습니다.

*멤버 연산자

멤버 연산자 설명
in 멤버 안에 값이 있어야 참이다.
not in 멤버 안에 값이 없어야 참이다.


(6)시퀀스 객체 반복하기

*연산자를 시퀀스 객체를 입력한 정수만큼 반복해 새 시퀀스 객체를 만들어줍니다.

참고로, 0 또는 음수를 곱하면 빈 객체가 나오고 실수는 곱할 수 없습니다.

(1,5,8)*3
tuple(range(1,100,4))*2

시퀀스 객체의 예들을 지금 튜플에만 적용해보았지만, 문자열,리스트에도 활용해볼 수 있습니다.

(7)시퀀스 객체 연결하기

시퀀스 객체 + 시퀀스 객체

이 때 같은 시퀀스형들끼리만 더해집니다.

a=(1,2,3,4)
b=(5,6,7,8)
a+b

튜플 a와 b를 더하니 리스트가 연결되었습니다. 변수에 저장하지 않고 직접 연결해봐도 상관없습니다.

하지만 range는 + 연산자로 객체로 연결할 수 없으니, range를 리스트나 튜플로 만들어서 연결하면 됩니다.

list(range(5,10))+list(range(0,4))

 

문자열은 + 연산자로 여러 문자열로 연결할 수 있습니다.

'IT'+' journey'

#'문자열' + str(정수)
'Orange'+str(2)

#'문자열'+str(실수)
'Orange'+str(2.5)


주의해야 할 사항은 문자열에 +를 사용할 때는 어떤 형태의 값이든 str을 사용해서 문자열로 맞춰주면 됩니다. 

(8)시퀀스 객체의 요소 개수 구할 때에는 len(시퀀스객체)를 쓰면 됩니다.

(9)range의 숫자 생성 구하기

len(range(5,20,4))

(10)slice 객체 사용하기
파이썬에서는 slice객체를 사용하여 시퀀스 객체를 잘라낼 수 있습니다.

# 시퀀스객체[slice객체]

# 시퀀스객체.__getitem__(slice객체)

위 둘과 같이 시퀀스 객체의 [] 또는 __getitem__메서드에 slice 객체를 넣어주면 지정된 범위만큼 잘라내서 새로운 객체를 만듭니다.

range(10)[slice(5,10,1)]
range(5).__getitem__(slice(5,10,1))

다음과 같이 시퀀스 객체의 [ ](대괄호) 또는 __getitem__ 메서드에 slice 객체를 넣어주면 지정된 범위만큼 잘라내서 새 객체를 만듭니다.

#리스트에 인덱스로 접근하여 요소 할당하기
a=[0,1,2,3,4,5]
a[5]=['a']
a

#리스트에 슬라이싱으로 접근하여 여러 요소 할당하기
a=[0,1,2,3,4,5]
a[1:3]=['a','b']
a
a[1:3]=['a']
a

#슬라이싱에 증가폭을 지정하여 할당하기
a=[0,1,2,3,4,5]
a[1:5:2]=['a','b']
a

 


논리 연산자

논리연산자

논리 연산자 설명
x or y x와 y 둘중에 하나만 참이면 참이다.
x and y x와 y 모두 참이어야 참이다.
not x x가 거짓이면 참이다.

 


내장함수

input() 함수

사용자로부터 입력받는 함수입니다. 데이터를 문자로 반환합니다.

그러므로 정수형을 받고 싶을 때에는 int(input())를 써서 받아야합니다.

 

입력 값을 변수를 두 개 저장하고 싶을 때에는 input().split()을 쓰게 되면 리스트를 반환합니다.

a,b=input().split()
print(a,b)

#위 코드와 같은 코드입니다.
x=5,10
a,b=x
print(a,b)

map을 사용하여 정수로 변환하기 
변수1, 변수2 =map(int, input().split())   # 값 두개를 입력 받아 변수 두개에 정수로 저장 
변수1, 변수2 =map(float, input().split())   # 값 두개를 입력 받아 변수 두개에 실수로 저장 
변수1, 변수2 =map(int, input().split('기준문자열'))
변수1, 변수2 = map(int, input('문자열').split())
변수1, 변수2 = map(int, input('문자열').split('기분문자열'))

a,b=map(int,input("숫자 두 개를 입력하세요: ").split(','))
a+b

참고로, 리스트에 map을 쓰게 되면 아래와 같습니다.

a=[5,6,7,8,1.5,2.5]
a = list(map(int,a))
a

패킹과 언패킹

패킹(packing) : 하나의 변수에 여러가지의 값을 포장하는 것을 말합니다.

언패킹(unpacking) : 여러가지의 값을 가진 하나의 변수를 여러변수로 나누는 것을 말합니다. 

 

#패킹의 예
a = [1, 2, 3] # 리스트 패킹
b = (1, 2, 3) # 튜플 패킹
c = 1, 2, 3 # 튜플 패킹

#언패킹의 예
c=(1,2)
a,b=c
a
b

 

이전 발행글

2021.05.20 - [개인공부공간/Python] - Python - 내장함수 1편

 

Python - 내장함수 1편

직접 내용 정리한 내용이니 퍼가실 때는 출처 부탁드려요 :) 1. print()함수 화면에서 데이터를 출력할 때 사용하는 함수 (1) print()함수 사용한 예 1) , 를 사용했을 시에는 띄어쓰기로 출력합니다. pr

step-journey.tistory.com

2021.05.21 - [개인공부공간/Python] - Python - 자료형 (숫자형,문자열,불린형)

 

Python - 자료형 (숫자형,문자열,불린형)

직접 내용 정리한 내용이니 퍼가실 때는 출처 부탁드려요 :) 형변환 데이터의 형태를 변환합니다. str(데이터) : 문자열로 변환합니다. int(데이터) : 정수로 변환합니다. float(데이터) : 실수로 변

step-journey.tistory.com

 

 

 

 

 




 

 

 

728x90
반응형

'개인공부공간 > Python' 카테고리의 다른 글

Python-함수  (17) 2021.05.26
Python - 제어문  (10) 2021.05.25
Python-자료형(사전형,집합)  (10) 2021.05.24
Python - 자료형 (숫자형,문자열,불린형)  (10) 2021.05.21
Python - 내장함수 1편  (4) 2021.05.20
Comments