튜플(tuple)
요소도 변경안됨(우회적으로 변경가능. mutable요소가능). 튜플도 변경안됨
고정된 집합 데이터 저장, 읽는 작업
여러개의 값을 한번에 초기화하는 작업에 많이 사용
튜플은 인덱스 사용 가능
a, b, c = 1, 2, 3 #묵시적 튜플사용
print(a)
print(b)
print(c)

 

 

#튜플생성
t1 = (1,2,3)
for i in t1:
    print(i, end=' ')

print()

for i in range(0, len(t1)):
    print(t1[i], end=' ')
print()


t2 = ('asd', 12, True, [3,4,5])
print(t2)



#빈 튜플 생성
t3 = ()
print(type(t3))

t4 = (1)            #튜플로 인식 안함
print(type(t4))

t5 = (1,)          #,를 하나라도 찍어줘야 튜플로 인식
print(type(t5))

out)

1 2 3 
1 2 3 
('asd', 12, True, [3, 4, 5])
<class 'tuple'>
<class 'int'>
<class 'tuple'>

 

 

#다차원 튜플
s1 = ((1,2,3), [4,5])
for i in range(0, len(s1)):
    for j in range(0, len(s1[i])):
        print('s1[',i,'][',j,']=',s1[i][j])

for i in s1:
    print(type(i))
    for j in i:
        print(j, end=' ')
    print()

out)

s1[ 0 ][ 0 ]= 1
s1[ 0 ][ 1 ]= 2
s1[ 0 ][ 2 ]= 3
s1[ 1 ][ 0 ]= 4
s1[ 1 ][ 1 ]= 5
<class 'tuple'>
1 2 3 
<class 'list'>
4 5 

 

 

#요소,수정,삭제 불가
t1 = (1,2,3,4,[5,6,7])

#t1[0] = 10   #에러! 튜플은 대입연산자 안됌!

t1[4][0]=50
print(t1)

t1[4].append(80)
print(t1)

del t1[4][0]
print(t1)

out)

(1, 2, 3, 4, [50, 6, 7])
(1, 2, 3, 4, [50, 6, 7, 80])
(1, 2, 3, 4, [6, 7, 80])

: 집합
요소 중복 허용 안됌
순서 없음
요소 변경 불가
셋 자체는 변경 가능(요소를 추가/삭제 가능)

 

s={1,2,3}
print(s)
print(type(s))

s={}    #요소가 없으면 딕셔너리로 바뀜
print(type(s))

s = set()    #공집합!
print(type(s))

#요소 순서 없기 때문에 인덱스 없음 s[1] 이런거 존재 안함
s= {1,2,3,2,3}  #중복된 값이 있으면 에러 없이 저장 안함
for i in s:
    print(i)    #set은 중복된 값 상관없이 한 개만 출력

s={'aaa', 1, False} 
print(s)         #set은 순서가 상관이 없음.


# s={1,2 [3,4,5]} 이런 형태는 안됌. 변경가능한 요소를 가질 수 없음
# s={1,2 {3,4,5}} 얘도 안되네..


out)

{1, 2, 3}
<class 'set'>


<class 'dict'>


<class 'set'>


1
2
3


{False, 1, 'aaa'}

 

#셋에 요소 추가
s.add('bbb')   #한개만 추가

a=[5,6,7]
s.update(a)    #여러개 추가
print(s)

#요소 삭제
s.remove('aaa')   #없는 요소 삭제시 에러발생
s.discard(1)  #discard : 삭제함수, 없는 요소 삭제시 무시
print(s)

x = s.pop()   #맨 앞에 있는 애가 빠짐
print(x, '가 삭제됨')
print(s)

x = s.pop()
print(x, '가 삭제됨')
print(s)

s.clear()   #모든 요소 삭제
print(s)

out)

{False, 1, 'aaa'}


{False, 1, 5, 6, 'aaa', 7, 'bbb'}


{False, 5, 6, 7, 'bbb'}

False 가 삭제됨


{5, 6, 7, 'bbb'}

5 가 삭제됨


{6, 7, 'bbb'}


{}

Process finished with exit code 0

 

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #함수  (0) 2021.06.04
python #dictionary  (0) 2021.06.03
python #list(3)  (0) 2021.06.03
python #test  (0) 2021.06.03
python #연습문제  (0) 2021.06.02

import copy
#얕은 복사
a=[1,2,3]
b=a #참조값 복사
print(a)
print(b)

a[2]=30
print(a)
print(b)

#얕은 복사2
a = [1,2,3]
b = copy.copy(a) # a리스트를 복사해서 같은 리스트를 b로 만들어라
print(a)
print(b)

a[2] = 30
print(a)
print(b)

###############
a=[1,2,[4,5,6]]
b = copy.copy(a)
print(a)
print(b)



a[2][0]=40
print(a)
print(b) #b까지 다 수정되네? ...

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #dictionary  (0) 2021.06.03
python # set  (0) 2021.06.03
python #test  (0) 2021.06.03
python #연습문제  (0) 2021.06.02
python #연습문제  (0) 2021.06.02


1. a라는 이름의 리스트를 생성. 숫자 1,2,3,4,5로 초기화해서 생성하시오.
2. a의 요소를 하나씩 출력
3. a의 인덱스가 2인 요소의 값을 13으로 변경하시오.
4. a의 요소 중 짝수만 출력
5. a의 인덱스가 2인 요소를 삭제하시오.
6. 이름이 b인 2줄 3칸 리스트 생성.
7. 0번줄의 2번방 요소를 10으로 변경하고 출력
8. b의 요소를 0번 줄은 [1,2,3], 1번 줄은 [4,5,6]로 변경
9. b의 모든 요소 출력

 

#1. a라는 이름의 리스트를 생성. 숫자 1,2,3,4,5로 초기화해서 생성하시오.
#내 풀이
a=[1,2,3,4,5]


#sol2
a=[1]*5
for i in range(0, 5):
	a[i] = i+1
    
    
   
#sol3
a=[]
for i in range(1, 6):
	a.append(i)
    
    
#sol4
c=[1,2,3,4,5]
a=list(c)

 

#2. a의 요소를 하나씩 출력
for i in range(0, len(a)):
	print(a[i], end=' ')
    
    
    
#2-2.
for i in a:
	print(i, end=' ')
    
    

out)

1 2 3 4 5

 

 

#3.a의 인덱스가 2인 요소의 값을 13으로 변경하시오.

a[2] = 13

out)

[1, 2, 13, 4, 5]

 

#4. a의 요소 중 짝수만 출력
for i in range(0, len(a)):
    if a[i] %2 == 0:
        print(a[i], end=' ')



#4-1.
for i in a:
    if i%2 == 0:
        print(i, end=' ')

out)

2 4 

 

 

#5. a의 인덱스가 2인 요소를 삭제하시오.
del a[2]

out)

[1, 2, 4, 5]

 

 

#6.이름이 b인 2줄 3칸 리스트 생성.

#so1. b[[0,0,0],[0,0,0]]
b=[[0]*3, [0]*3]
print(b)


#sol2.
b=[0]*2
for i in range(0, len(b)):
    b[i]=[0]*3
print(b)

 

 

#7. 0번줄의 2번방 요소를 10으로 변경하고 출력
b[0][2] = 10
print(b)

out)

[[0, 0, 10], [0, 0, 0]]

 

 

 

#8.b의 요소를 0번 줄은 [1,2,3], 1번 줄은 [4,5,6]로 변경
c=1
for i in range(0, len(b)):
    for j in range(0, len(b[i])):
        b[i][j] = c
        c += 1
    print(b)

out)

[[1, 2, 3], [4, 5, 6]]

 

 

#9.b의 모든 요소 출력
for i in b:
    for j in i:
        print(j, end=' ')
    print()

out)

1 2 3 
4 5 6 

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python # set  (0) 2021.06.03
python #list(3)  (0) 2021.06.03
python #연습문제  (0) 2021.06.02
python #연습문제  (0) 2021.06.02
python #list (2)  (0) 2021.06.02

Q. <성적처리 프로그램>

   3명의 번호, 국어, 영어, 수학 점수를 입력받아 각 학생의 총점, 평균을 계산해서 결과를 출력하라.

   ex) 번호 국어 영어 수학 총점 평균
        1     98    89    87   257   80
        2     98    89    87   257   80 
        3     98    89    87   257   80

 

score = [[0]*6,[0]*6,[0]*6]
title = ['번호', '국어', '영어', '수학', '총점', '평균']


'''
score[0][0] = int(input('번호'))
score[0][1] = int(input('국어'))
score[0][2] = int(input('영어'))
score[0][3] = int(input('수학'))
'''

for i in range(0,3):
    for j in range(0, 4):
       score[i][j]=int(input(title[j]))

for i in range(0,3):
    for j in range(1,4):  #person[0][4] = person[0][1]+person[0][2]+person[0][3]
        score[i][4] += score[i][j]
        score[i][5] = score[i][4] / 3

for i in title:
    print(i, end='\t')     #print('번호\t국어\t영어\t수학\t총점\t평균')
print()

for i in range(0, len(score)):
    for j in range(0, len(score[i])):
        print(score[i][j], end='\t')
    print()



out)

 

 

알고리즘 훈련이 코딩을 짜는데 확실히 도움이 된다!

3개의 리스트를 동시에 만드는 것이 힘들어서 1개짜리로 출력하는 것을 먼저 진행하고 나니 이해도가 빨랐다.

 

 

 

Q. 한 사람의 번호, 국, 영, 수 점수를 입력받아 총점, 평균

person = [0]*6
title = ['번호', '국어', '영어', '수학', '총점', '평균']

for i in range(0,4):
    score[i]=int(input(title[i]))

for i in range(1,4):
    person[4]+=person[i] # person[0][4] = person[0][1]+person[0][2]+person[0][3]

person[5]= person[4] /3

for i in title:
    print(i, end='\t')     #print('번호\t국어\t영어\t수학\t총점\t평균')

for i in person:
    print(i, end='\t')
print()

out)

번호 국어 영어 수학 총점 평균
1     95   65    48    208   69.33333333333333

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #list(3)  (0) 2021.06.03
python #test  (0) 2021.06.03
python #연습문제  (0) 2021.06.02
python #list (2)  (0) 2021.06.02
python #list  (0) 2021.06.02
다차원리스트

 

다차원리스트는 복잡한 구조의 데이트를 표현하기 위해 사용한다.

그런 데이터가 뭐가 있을까?

바로 3차원 이미지!!

 

이미지(픽셀)은 RGB 3개의 값으로 구성되어있는데, 

[0, 255, 0]   -> r 없고, g 255, b 없고  -> 완전 초록색인 픽셀

[90, 80, 75]  -> r의 세기 90, g는 80, b는 75   -> 픽셀

 

이렇게 구성되어있다. (수학에서 x,y,z 좌표라고 생각하면 되겠지?)

이런 픽셀이 모여서 선이 되고 모인 선이 면, 면이 차원이 된다.

 

결국, 이미지는 리스트로 계속 나열이 된다.

 

 

리스트를 요소로 갖는 리스트가 다차원리스트

 

a= [[1,2,3], [4,5,6]]

print(a[0])
print(a[1])

out)

[1, 2, 3]
[4, 5, 6]

 

 

a= [[1,2,3], [4,5,6]]

for i in a:   #2번반복, a의 원소가 2개니까
    for j in i:  #[1,2,3]     약간 멱집합!
        print(j, end=' ')
    print()




for i in range(0, len(a)):
    for j in range(0, len(a[i])):
        print(a[i][j], end=' ')
    print()
    
    

out) 둘 다 같은 결과

1 2 3
4 5 6

 

다차원리스트는 집합 안에 집합이 있는 멱집합 같은 것~~

 

 

 

#a의 모든 요소들을 10배로 늘려주자.

a= [[1,2,3], [4,5,6]]


for i in range(0, len(a)):
    for j in range(0, len(a[i])):
        a[i][j] *=10

for i in a:
    for j in i:
        print(j, end=' ')
    print()
    ​

out) 둘 다 같은 결과

10 20 30
40 50 60

 

 

#요소 입력받아 저장
for i in range(0, len(a)):
    for j in range(0, len(a[i])):
        a[i][j]=int(input('num:'))
print(a)

out)

 

 

# enumerate() : 반복자. 리스트에서 요소를 하나씩 순서대로 추출하는 것을 반복
# 반복적으로 방번호와 요소를 추출해서 반환

 

 

a= [9,8,7,6,5]

for i in a:
    print(i)


for idx, i in enumerate(a):
    print('idx:', idx, ", i:", i)



for idx, i in enumerate(a):
    print('a[',idx,']=',i)
    
    

out)

 

Q. 리스트에 5개의 숫자를 입력받아서 저장 후, 최댓값 최솟값 출력

'''
1.최댓값, 최솟값 출력
max=첫요소  #가장 큰값 담을 변수
max의 값과 각 방의 값을 비교해서 현재 max 값보다 큰 값이면 바로 max할당
'''



a=[]
for i in range(0, 5):
    a.append(int(input('num:')))

max = a[0]
min = a[0]
for i in a:
    if max < i:
        max = i
    elif min > i:
        min = i
print("max:", max,'min:', min)

out

 

 

#1-1. max, min과 함께 인덱스도!
a=[]
for i in range(0, 5):
    a.append(int(input('num:')))

max = a[0]   #첫 요소 할당(초기 기준값). 현재까지 가장 큰 값 저장.
max_idx = -1
min = a[0]
min_idx = -1
for idx, i in enumerate(a):
    if max < i:   #max보다 더 큰 값을 만나면 max를 그 값으로 교체
        max = i
        max_idx=idx
    if min > i:
        min = i
        min_idx=idx
print('최댓값:', max, '/', '최댓값의 위치:', max_idx)
print('최솟값:', min, '/', '최솟값의 위치:', min_idx)

out

 

 

Q. 찾고싶은 값 입력받아서 그 값의 위치 출력, 없을시 없다고 출력

#sol1
a=[]
for i in range(0, 5):
    a.append(int(input('num:')))

s_num = int(input('검색할 숫자:'))
for i in range(0, len(a)):
    if a[i] == s_num:
        print('찾았습니다.: 위치',i)

if a[i] != s_num:
    print('not found')




# sol2
a=[]
for i in range(0, 5):
    a.append(int(input('num:')))

s_num = int(input('검색할 숫자:'))
for idx, i in enumerate(a):
    if s_num == i:
        print('찾았습니다.: 위치',idx)
        break
if s_num != i:
    print('not found')

out)

 

 

 

#2-2. 순차탐색
#sol1
s_num = int(input('검색할 숫자:'))
flag = True    #찾았나 표시. 못찾앗을때 true.
for idx, i in enumerate(a):
    if s_num == i:
        print(idx,' 방에 있음')
        flag = False
        break
if flag==True:
    print('not found')

위의 예제는 공부한 후 다시 보기   

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #test  (0) 2021.06.03
python #연습문제  (0) 2021.06.02
python #list (2)  (0) 2021.06.02
python #list  (0) 2021.06.02
python #피카츄게임?  (0) 2021.06.01
리스트도 요소를 변경할 수 있다!

 

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

a[2]=30  #인덱스 수정
print(a)

del a[2]  #인덱스 삭제
print(a)

del a[1:3]  #범위로 삭제(1~2)
print(a)

a.remove(1)  #값을 찾아서 삭제. 없는 값이면 에러
             #만약 a.remove(10)  #10은 없는 값이라 에러
print(a)

out)

[1, 2, 3, 4, 5]
[1, 2, 30, 4, 5]
[1, 2, 4, 5]
[1, 5]
[5]
a=[1,2,3,4,5]
a.remove(10)  #10은 없는 값이라 에러
print(a)

out)

ValueError: list.remove(x): x not in list

 

 


b=[2,7,4,5,3]
list.sort(b)    #정렬
print(b)

out)

[2, 3, 4, 5, 7]

 

 

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #연습문제  (0) 2021.06.02
python #연습문제  (0) 2021.06.02
python #list  (0) 2021.06.02
python #피카츄게임?  (0) 2021.06.01
python #연습문제  (0) 2021.06.01
list 복습!

 

메모리에 데이터를 할당(저장)하는 방법은 2가지가 있다.

1. 변수

2. 리스트

변수는 지금 껏 직접 변수명과 값을 입력해주어야 했다. 하지만 입력해야할 변수들이 100개라면 변수명을 일일히 나열할 수는 없을 것이다. 그래서 사용하는 것이 리스트!

 

 

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

print(b[0])
print(b[1])
print(b[2])
print(b[3])
print(b[4])

out)

1
2
3
4
5

리스트는 위의 예제처럼 칸을 여러개로 나누어 여러개의 변수를 담는 호텔이라고 생각하면 된다.

리스트의 앞에서부터 우리는 0호, 1호, 2호, 3호 ... 이런 식으로 이름을 붙일 것이다.

즉, b= [1, 2, 3, 4, 5] 에서 0호의 값은 1, 1호의 값은 2, 4호의 값은 5가 된다.

리스트를 이용해 변수 값을 잡는 것이 훨씬 수훨해졌다.

 

 

그럼 리스트를 좀 더 간략하게 해보자.

b=[0,1,2,3,4] 를 for i in range(0, 5) 로 나타낼 수 있다.

#range(시작, 끝값, 간격)
for i in range(0,5):     # [0,1,2,3,4]
    print(i)
    

out)

0
1
2
3
4

 

 

즉, 다시 정리하면 list는 집합 데이터를 효율적으로 사용할 수 있다.

예를 들어 100개의 점수들의 합을 구할 때, 리스트를 사용하지 않는 다면

 

s1 = 90

s2=80

s3=70

s100=80

 

이라고 직접 변수의 이름과 값들을 잡아서

 

sum = s1 +s2+ s3+ … +s100

 

을 진행해야하지만

 

 

리스트 사용 한다면 (for을 같이 사용하는게 좋겠쥬?)

 

score = [89,67,5,34,65,78,34,....80]

for i in score:

sum += i

 

 

로 간단하게 끝낼 수 있다.

 

list의 크기

리스트의 크기란 방의 개수라고 생각하자.

a=[1,2,3] #리스트 크기: 방의 개수. , a의 크기는 3
b=['', '', '','라']
c=[12.24, 34.45]
d=[True, True, False]

 

 

 

list의 요소

리스트에 저장된 값 하나하나를 요소라고 한다.

a=[1,2,3]에서 요소는 1, 2, 3 이다 (수학적으로 얘기하면 원소!)

 

또한, 하나의 리스트에 다양한 타입의 값을 담을 수 있다.

(다른 언어에는 타입 제약이 있음.

int a = 10 이라고하면 a는 무조건 int값만 들어갈 수 있지만
파이썬에서는 a =10, a= 'asdf' 라고 해도 문제가 안생긴다.)

 

a=[1,2,3]
print(a[0])  #리스트의 0번방 값 출력
print(a[1])
print(a[2])


print()


for i in range(0, 3):    #위의 에제를 좀 더 간단히
    print(a[i])


print()


for i in a:
    print(i)   #더 간단히!!

out) 모든 결과가

1
2
3

 

 

 

list의 index

index는 방 번호라고 생각하자!

a=[1,2,3]에서 0번 인덱스의 요소는 1, 1번 인덱스의 요소는 2, 2번 인덱스의 요소는 3.

또는

a[0] = 1

a[1] = 2

a[2] = 3 

이라고 할 수 있다.

*참고로 인덱스는 0번부터 시작한다. (앞서 리스트의 방 번호는 0번부터 시작이라고 했었음)

 

만약

print(a[3])

를 한다면 에러가 뜬다. 범위 밖의 인덱스이기 때문에 없는 방에 대한 접근이다.

(현재 a는 방이 0~2호까지만 존재)

 

 

파이썬에서는 인덱스 추가가 불가능. (C에서는 가능)

 

그래서
a.append(4)   #방을 확장. 리모델링 한것! 확장한 방에 값 저장.

 



#빈 리스트 생성
e = []
f = list()     #리스트 함수로 생성

 

e = []
f = list() 

e.append('aaa')    #빈 리스트에 aaa라는 문자열 추가
f.append('bbb')

print(e)
print(f)

out)

['aaa']
['bbb']

 

 

 

b=['aaa','bbb','ccc']
print('b의 길이:', len(b))   #len: 길이

print(len('asdfㄹㅇㄴㄹㅇ'))



for i in range(0, len(b)):
    print(b[i], end=',')     #인덱스로 접근




for i in b:                 #요소로 접근
    print(i, end=',')
    
    

out)

b의 길이: 3
9

aaa,bbb,ccc,

aaa,bbb,ccc,

 

 

Q. 숫자 10개를 입력받아서 리스트에 저장한 뒤 출력하라.

 

#sol1

data=[0]*10  #리스트를 0으로 초기화한 방 10칸 생성
for i in range(0,len(data)):
    data[i] = int(input('num:'))

for i in data:
    print(i, end=' ')



#sol2 

data2=[]
for i in range(0,10):
    data2.append(int(input('num:')))
print(data2)

out)

num:1
num:4
num:6
num:9
num:3
num:5
num:4
num:9
num:7
num:52
1 4 6 9 3 5 4 9 7 52 

 

 

 

Q. 5명 학생의 점수를 입력받아 총점과 평균을 출력하라.

 

#sol1
data3=[]
sum = 0
for i in range(0, 5):
    data3.append(int(input('점수를 입력하시오:')))
for i in data3:
    sum += i
avg = sum/5
print('총점:', sum, '평균:', avg)




#sol2

data3=[0]*5         # data=[0,0,0,0,0]
sum = 0
for i in range(0, 5):
    data3[i] = int(input('점수'))
    sum += data3[i]
avg = sum / 5
print('총점:', sum, '평균:', avg)




#sum함수 사용하면

data3=[]
for i in range(0, 5):
    data3.append(int(input('점수를 입력하시오:')))
s = sum(data3)               
avg = s/5
print('총점:', s, '평균:', avg)


out)

점수를 입력하시오:20
점수를 입력하시오:64
점수를 입력하시오:68
점수를 입력하시오:12
점수를 입력하시오:97
총점: 261 평균: 52.2

 

'파이썬이 제일 쉽다면서요' 카테고리의 다른 글

python #연습문제  (0) 2021.06.02
python #list (2)  (0) 2021.06.02
python #피카츄게임?  (0) 2021.06.01
python #연습문제  (0) 2021.06.01
python #반복문 : while, for  (0) 2021.06.01

+ Recent posts