Python 리스트.튜플 조작(할당, 복사, 반복문, 최소.최대값, map)

yo·2020년 5월 5일
0

리스트 조작 기본

-리스트기능: 요소추가, 삭제, 조회, for문과 결합 등
-리스트에 요소 추가하는 method:
1)append:요소 하나를 추가
2)extend:리스트를 연결하여 확장
3)insert: 특정 인덱스에 요소 하나 추가

append 예시)

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

-append로 리스트 안에 리스트를 추가할 수 있다.(추가된 리스트는 내부요소와 상관없이 길이 1로 취급)
예시)

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

-extend예시)
-extend는 리스트 끝에 다른 리스트를 연결하여 리스트를 확장한다.

a = [1,2,3]
a.extend([4,5])
print(a)
[1, 2, 3, 4, 5]
len(a)
5

-insert 예시)

a = [1,2,3]
a.insert(2,7)
print(a)
[1, 2, 7, 3]

-insert 추가 문법
1) insert(0,요소): 리스트 맨 처음에 요소 추가
2) insert(len(리스트),요소): 리스트 맨끝에 요소추가
-insert는 요소 하나를 추가하므로 insert에 리스트를 넣으면 append처럼 리스트 안에 리스트가 들어간다
예시

a = [1,2,3]
a.insert(1,[6,7])
print(a)
[1, [6, 7], 2, 3]

리스트 요소 삭제하기

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

pop뒤에 ()만 지정하면 맨 뒤의 요소가 사라진다.
예시)

a = [1,2,3]
a.pop()
3
print(a)
[1, 2]

pop뒤의 ()안에 인덱스 지정시 해당 요소 사라진다
예시)

a = [1,2,3]
a.pop(1)
2
print(a)
[1, 3]

-pop 대신 del을 사용해도 무방하다.
예시

a = [1,2,3]
del a[1]
print(a)
[1, 3]

-remove는 리스트 내의 특정 값을 찾아 삭제한다.
-값 중복시 처음 찾은 값을 삭제한다.
예시

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

list 인덱스 값 구하기

-특정값의 인덱스 구할 수 있다.
-값이 여러개일 경우 처음 찾은 인덱스를 출력
예시

a = [1,2,3,1]
a.index(1)
0

count(특정 값의 개수 구하기)

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

reverse 리스트 요소 순서 뒤집기

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

sort 요소 오름/내림차순 정렬

문법: sort() 또는 sort(reverse=False): 올름차순
문법: sort(reverse=True): 내림차순

예시1)

a = [4, 2, 6, 1, 3]
a.sort()
print(a)
[1, 2, 3, 4, 6]

예시2)

a = [4, 2, 6, 1, 3]
a.sort(reverse=True)
print(a)
[6, 4, 3, 2, 1]

요소 삭제 clear del

-clear()는 리스트 모든 요소 삭제
-del a[:]로 시작, 끝 인덱스 생략하여 리스트 모든 요소 제거 가능

예시1)

a = [4, 2, 6, 1, 3]
a.clear()
print(a)
[]

예시2)

a = [4, 2, 6, 1, 3]
del a[0:2]
print(a)
[6, 1, 3]

리스트를 슬라이스로 조작하기

-리스트 끝에 값이 한 개 들어있는 리스트 추가하기

a = [1,2,3]
a[len(a):] = [4]
print(a)
[1, 2, 3, 4]

위의 코드는 a.append(4)와 같다

-리스트 끝에 요소가 여러개인 리스트 추가하기

a = [1,2,3]
a[len(a):] = [4,5]
print(a)
[1, 2, 3, 4,5]

위의 코드는 a.extend([4,5]) 와 같다.

리스트의 할당과 복사

  1. 할당
    -리스트 a 를 b에 할당하면 a와 b는 완전히 같아지고 하나가 된다.
a = [1,2,3,4]    #a를 정의
b = a            #b를 a에 할당
a is b           #a 와 b가 같냐고 물으면
True             # 참
b[2] = 9         #b의 인덱스 2를 수정하면
print(a)
[1, 2, 9, 4]     #a와 b는 같기에 a도 수정됨
  1. 복사(copy)
    -a,b의 내용은 같게 하면서도 독립적인 리스트로 유지하게 위해선 할당이 아닌 copy를 사용하면 된다.
a = [1,2,3,4]   #a 정의
b = a.copy()    #a를 b에 복사
a is b          #a와 b가 같냐 물으면
False           #false
a == b          #a와 b의 '요소'가 같냐 물으면 
True            #True
b[2] = 9        #b의 인덱스 2를 수정해도
print(a)        #a엔 변화가 없다.
[1, 2, 3, 4]
print(b)
[1, 2, 9, 4]

for 반복문으로 리스트 출력

예시1)

a = [1,2,3,4]
for i in a:
	print(i)

	
1
2
3
4

예시2)

for i in [1,2,3,4]:
	print(i)

	
1
2
3
4

for+리스트, index+element 함께 출력

문법: for 인덱스, 요소 in enumerate(리스트):

예시)

a = [1,2,3,4]
for index, value in enumerate(a):
	print(index, value)

결과)
0 1
1 2
2 3
3 4

물론 아래처럼 인덱스, 요소 자리는 임의의 변수를 지정하면 된다. 이름은 freestyle

a = [1,2,3,4]
for hi, bye in enumerate(a):
	print(hi, bye)

결과
0 1
1 2
2 3
3 4

아래처럼 인덱스를 1부터 출력할 수도 있다.

for hi, bye in enumerate(a):
	print(hi + 1, bye)
결과	
1 1
2 2
3 3
4 4

인덱스를 1부터 출력하는 좀 더 파이썬스러운 방법
-문법1: for index, value in enumerate(요소, start=1):
-문법2: for index, value in enumerate(요소, 1(시작하고자하는인덱스숫자))

예시)

a = [5,6,7,8]
for i, v in enumerate(a, start=1):
	print(i, v)

결과:
1 5
2 6
3 7
4 8
a = [5,6,7,8]
for i, v in enumerate(a, 1):
	print(i, v)

결과:
1 5
2 6
3 7
4 8

while반복문으로 요소 출력하기

a = [5,6,7,8]
i = 0
while i < len(a):
	print(a[i])
	i += 1

결과
5
6
7
8

리스트 가장 작은(큰) 수, 합계 구하기

-가장 작은 수 구하기 예시1

a = [60, 50, 70, 90, 10]
smallest = a[0]
for i in a:
	if i < smallest:
		smallest = i

print(smallest)
10

-가장 큰 수 구하기 예시2

a = [34, 62, 79, 12, 0]
largest = a[0]
for i in a:
	if i > largest:
		largest = i

		
print(largest)
79

-위 방법 말고 sort를 이용해 구하는 방법도 있다.
예시3) sort

a = [34, 62, 79, 12, 0]
 a.sort()
print(a[0])
0

예시4) sort

a = [34, 62, 79, 12, 0]
 a.sort(reverse = True)
 print(a[0])
79

-max, min을 사용해 최대, 최수값을 구할 수도 있다.
예시)

a = [34, 62, 79, 12, 0]
min(a)
0
max(a)
79

합계 구하기

  1. 합계 by 반복문
a = [34, 62, 79, 12, 0]
x = 0
for i in a:
	x += i
	
print(x)
187
  1. 합계 by sum함수
a = [34, 62, 79, 12, 0]
sum(a)
187

***min, max, sum은 리스트 뿐 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다.

리스트 표현식 사용하기

-파이썬 리스트가 특이한 점은 리스트 안에 for, if를 사용할 수 있다는 것.
-리스트 안에 식, for, if등 지정하여 리스트를 생성하는 것을 리스트 컴프리헨션(list comprehension)이라고 한다.
-책이나 인터넷에서도 리스트 내포, 리스트 내장, 리스트 축약, 리스트 해석 등으로 씀.
-컴프리헨션: 능력, 이해력, 시험 등도 잇지만 무언가를 담아둔다는 뜻이 있다.
-식으로 지정해 생성된 것을 리스트로 잡아두는 것을 list comprehension이라고 함.

-문법1: [식 for 변수 in 리스트]
-문법2: list(식 for 변수 in 리스트)

문법1예시)

a = [i for i in range(10)]
print(a)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

문법2예시)

b = list(i for i in range(10))
print(b)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

-i를 연산한 값을 출력할 수도 있다.
예)

a = [i * 2 for i in range(10)]
print(a)

결과
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

리스트 표현식에 if문 사용하기

문법1: [식 for 변수 in 리스트 if 조건식]
문법2: list(식 for 변수 in 리스트 if 조건식)

예시)

a = [i for i in range(10) if i % 2 ==0]
print(a)
[0, 2, 4, 6, 8]

리스트에 for문과 if문 여러 번 사용(구구단)

a = [i * j for j in range(2, 10) for i in range(1, 10)]
>>> print(a)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]

위 코드를 아래처럼 두 줄로 작성해도 된다.

a = list(i * j for j in range(2,10)
	           for i in range(1,10))

-리스트 표현식에서 for가 여러 개일 때 처리 순서는 뒤에서 앞으로 순서

리스트에 map 사용하기

-문법: list(map(함수, 리스트))
-문법: tuple(map(함수, 튜플))
예시)

a = [1.2, 2.2, 3.3, 4.4]
for i in range(len(a)):
	a[i] = int(a[i])

	
print(a)
[1, 2, 3, 4]

-위처럼 매번 for 반복문 하면 번거롭다->map 편리
예시)

a = [1.2, 2.2, 3.3, 4.4]
a = list(map(int, a))
print(a)
[1, 2, 3, 4]

-range, map으로 숫자->문자열 만들기
예시)

a = list(map(str, range(10)))
print(a)
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

input(). split()과 map

다음처럼 input().split()을 사용한 뒤에 변수 한 개에 저장해보면 리스트인지 확인할 수 있다.

a = input().split()
10 20
print(a)
['10', '20']       #문자열 요소 10,20을 가진 리스트 

이제 map을 사용해 정수로 전환하자.

a = list(map(int, input().split()))
10 20
print(a)
[10, 20]

위 리스트 [10, 20]을 변수 두 개에 저장하면 지금까지 사용한 a, b= map(int, input().split()과 같은 동작이 된다.

a , b = [10, 20]
print(a)
10
print(b)
20

-사실 map이 반환하는 맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능하다.
-a, b = map(int,input().split()처럼 list를 생략한 것임.
-a, b =map(int, input().split())을 풀어쓰면 아래와 같은 코드가 된다.

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

위 내용을 tuple에 응용하기

-튜플은 리스트와달리 내용 변경 불가(immutable)
-내용 변경하는 append같은 메서드는 사용 불가하고, 요소의 정보를 구하는 메서드만 사용 가능.

튜플 인덱스 값 구하기

-같은 값의 중복 시 맨 앞에 위치한 값이 구해진다.
예)

a = (1, 2, 3, 4, 1)
a.index(1)
0

튜플 특정 요소 개수 구하기(count)

a = (1, 2, 3, 4, 1)
a.count(1)
2

튜플에 for 반복문 사용하기

 a = (1, 2, 3, 4, 1)
 for i in a:
	print(i, end=" ")

결과	
1 2 3 4 1 

튜플 표현식 사용하기

문법: tuple(식 for 변수 in 리스트 if 조건식)
예시

a= tuple(i for i in range(10) if i % 2==0)
print(a)
(0, 2, 4, 6, 8)

-참고로 괄호 안에 표현식을 넣으면 튜플이 아니라 제너레이터 표현식이 됨(아직 안배운 내용, 나중에)

tuple에 map 사용

a = (1.1, 2.2, 3.3, 4.4)
a = tuple(map(int, a))
print(a)
(1, 2, 3, 4)

튜플 최대, 최소값, 합계 구하기

a = (1.1, 2.2, 3.3, 4.4)
min(a)
1.1
max(a)
4.4
sum(a)
11.0
profile
Never stop asking why

0개의 댓글