혼자 공부하는 파이썬 37강 - 튜플
HTML-код
- Опубликовано: 9 фев 2025
- 튜플을 다룹니다. 예전 대학교에서 수업 들을 때, 교수님이 완전히 잘못 알고 계셔서 어떻게 해야하나 발 동동하던 부분 중 하나입니다. 다른 프로그래밍 언어 하다가 파이썬을 할 때 실수를 많이하는 부분이므로 주의해주세요.
참고로 저는 대학교 1학년 때부터 책을 내서, 대학교 때 제 교재로 수업하고 그랬습니다. 조용히 있는걸 좋아해서 아무도 제가 저자인지 몰랐습니다.
몇 번 "아니 이건 완전히 잘못 설명하고 있잖아 흑흑"하면서 밝힐뻔한 적이 몇 번 있는데, 튜플이 가장 대표적이었던 부분이라 기억에 남네요.
PS. (1, )를 요소 개수가 2개라고 설명하기에 아니이이 우당탕탕
대학교 1학년에서 책을 집필하고 교재로 사용했다니 거의 신동에 가깝습니다. 프로그램밍 언에 귀재가 된 특별한 계기가 있었는지요. 참 부럽습니다.
어우 호구입니다 호구 ;ㅁ; .... 잘하는기 없습니다 ;ㅁ; ....
두뇌가 얼마나 좋은지를 신동기준으로 삼는 게 아니고 어떤 것에 대한 집요함 또는 흥미로 기준을 삼는다면 저자님은 신동이 맞는 것 같아요. 멋집니다.
안녕하세요 파이썬 공부 11일차 독학생입니다
2:39분에서 리스트를 변경하는 과정 중 문득 이런 과정을 돌려봤습니다
[a,b] =[10,20]
(c,d) = 30,40 기존 리스트와 튜플을 저장합니다
1. a = 999 @변수 자체를 바꿨을 땐 변수가 변경됩니다.
2. [a,b][0] = 999 @처음에 이걸 돌렸을 때 기존 리스트로 출력됩니다
print(a,b,c,d)로 출력했습니다
결과는
1. 999 20 30 40
2. 10 20 30 40 이 나옵니다
Q1. 리스트의 요소를 바꾸는데 변수명으로만 변경이 되는건가요?
Q2. 그리고 2번째 과정이 튜플에서도 적용되나요?
방학 중에만 몰두하니 벌써 코드는 다 돌려봤지만 강의를 통해 공부가 많이 됩니다.
감사합니다!!
하나더 있네요 ㅎㅎ
4:20~4:23
파이썬 프로그램 중 여러 줄을 지우고 입력하는 프로그램이 있는데
알려줄 수 있을까요?
마지막이네요 ㅎㅎ
10:31
딕셔너리a를 저장하는 중에서
(0,0)인 튜플을 뺄 수 있나 싶어서 빼고 실행을 했는데 구문오류로 뜹니다
제 추측은 0,0 = 10 행에서 키값인 0,0 을 숫자로 바라봤다라고 생각합니다
자세한 답은 무엇인가요?
그리고
출력과정 print(a(0,0))을 입력했지만 TypeError가 나왔습니다
딕셔너리 a를 안의 키값을 리스트로 나타나야 하는 이유가 무엇인가요?
감사합니다!
6강 마지막에서 살펴보는데, 비주얼 스튜디오 코드에서 ctrl + alt 누르고 방향키 위 아래를 누르시면 여러 줄이 잡힙니다!
[a, b] = [10, 20]과 (c, d) = 30, 40은 리스트와 튜플에 저장하는 코드가 아니라
내부적으로 "다중 할당 연산"이라는 특별한 코드로서 처리되는 것이라고 생각해주세요.
따라서 """
[a,b] =[10,20]
(c,d) = 30,40
"""를 실행한 후에는 a, b, c, d가 각각의 변수일 뿐입니다.
[a, b][0]은 리스트 [a, b]를 만들고, 0번째 것의 "값"을 추출하는 코드입니다.
따라서 [a, b][0] = 999는
30 = 999라는 코드입니다.
이 코드는 파이썬 문법이 약간 허술[?]해서 되는 것이고
실질적으로 실행했을 때 아무 의미가 없는 처리입니다!
따라서 [a, b][0] = 999는 아예 안 쓰는 코드라고 생각해주세요![저도 이게 되는지 처음 알았네요]
와~~~~ 왜여왜여? 저자인지 밝히셨으면.. 다른 학생들과 교수님의 표정.. 상상만 해도 재밌는데, 영화같은 장면이 나왔을꺼 같아요...
윤인성님은 그럼 언제부터 공부를 하셨길래,때 책을 낼수가 있었던건가여? 진정 천재신건가여? @.@ 대박 멋지심요.^^
말하면 복잡해질 것이 분명해서 말하지 않았습니다 'ㅁ'
프로그래밍 공부는 한글 배우면서 거의 같이 했는데
[어릴 때 일기 보면 '네일은 MFC로 이런거 만들어야지'처럼 내일도 제대로 못 쓰면서 MFC까지 다루고 있고 그랬어서],
프로그래밍을 그냥 어릴 때 배운거지 + 천재는 아닌 것 같습니다 ;ㅁ; !
@@윤인성 우와~~더 놀라운걸여~~’O’
혹시 집이 카이스트대학 안에 있었다든가..ㅋㅋ
@@bbossam_jjudy 반지하에서 살던 가족이라 ;ㅁ; 카이스트 등은 너무나도 먼 이야기 ;ㅁ; ....
@@윤인성 그럼, 진심 천재가.... ^^
@@윤인성 어떻게 그렇게 어렸을때부터 프로그래밍을 접하셨나요? 사실 요즘에야 프로그래밍이 대세라 초딩부터
코딩을 배운다지만 그 당시엔 그렇게 보편적인건 아니었을텐데....
대학교 에피소드 정말 재밌네요! 책 사고 강의 듣는데 책의 모든 내용을 강의해주시지 않고 중요 부분만 알려주시고 나머지는 책을 볼 수 있어 도움이 빠른 시간에 독학할 수 있어서 아주 좋네요 감사합니다!
+혹시 교수님께서 튜플을 잘못 설명해주셨을 때 지적하셨는지 궁금해요 ㅋㅋ!
저는 초 아싸라서 ;ㅁ; ....
수업 떄 그냥 구석에 쭈그렁 있었습니다 ;ㅁ; ...!!
튜플은 수정이 불가능한데 swap함수 느낌으로 값을 바꾸는 부분에서 a,b=b,c는 수정하는거 아닌가용../?
새로운 튜플을 만들 뿐입니다!
기존의 튜플이 바뀌는 것이 아닙니다!
@@윤인성 감사합니다
선생님!! 너무 재밌게 파이썬 하는 중인데 스튜디오 code 프로그램에서 코드짤때 계속 네모 창으로 *values:object ~~~~ 나와서 너무 불편한ㄷ ㅔ이게 analysis 인가요? 설정에서 다껐는데도 계속 나와요 도와주세요 ㅠㅠㅠㅠ
python 확장 프로그램이 기본적으로 띄우는거라 제거가 안 됩니다 😂...! 이후에 외워야하는 코드가 점점 많아질 때부터는 도움이 많이 되므로 익숙해지는 것을 추천드립니다!
키에 튜플이 들어가는게 독특하네요.
252페이지에
def a(func):
for i in range(10):
func()
def b():
print("안녕하세요")
a(b)
부분에서 func() 부분이 이해가지 않습니다. 왜 저렇게 적어야하나요? 그리고 마지막 줄을 print(a(b))로 바꿔서 실행하면 안녕하세요*10번에 none이 뜨는데 왜 none이 뜨나요?
(1) "왜 저렇게 적어야 하나요?"에서 원하는 답의 방향성을 명확하게 모르겠는데 @_@
"매개변수로 전달된 함수를 이렇게 실행할 수 있다"를 보여주기 위한 코드일 뿐입니다.
그래서 그냥 매개변수로 전달된 함수를 실행할 뿐입니다.
(2) 함수에서 아무 것도 리턴하지 않으면 None을 리턴합니다.
현재 함수 a에서는 리턴하는 것이 없으므로, print(a(---)) 했을 때 None이 뜹니다.
@@윤인성 감사합니다!
고등학생때부터 천재였던 건가요..? 닝겐...
그냥 일반인입니디 😭
튜플은 괄호를 생략할 수 있다고 배웠는데, 딕셔너리의 키 값에 튜플을 넣을 때 괄호를 안 쓰면 빨간줄이 뜨더라구요... 왜일까요 선생님?
문법적으로 대부분의 위치에서는 생략 가능하지만, 일부 예외가 있습니다. 지금 말씀해주신 딕셔너리도 예외 중 하나입니다. 괄호가 없으면
{ ㅇ:ㅇ, ㅁ, ㅂ: ㅂ }으로 살짝 헷갈려서 그렇습니다!
과거 강의 내용인데 몇강인지 몰라서요 ..
한달동안 쉬다가 다시 들었더니까먹엇네요 ㅠ
아래에서 print 앞에만 선택하려면 어떻게 해야했나요..?
블록잡기 말고 전체 앞줄 커서 로 ...ㅠ
네이버 비쥬얼스튜디오 단축키 검색해도 안나오고 해서 문의드려요 (꾸벅)
print(tuple_test[0])
print(tuple_test[1])
print(tuple_test[1])
Ctrl alt + 방향키 위 아래입니다!
@@윤인성 감사합니당^^
유튜브 강의 넘기다 보니 저도 모르게 책을 주문해버렸네요 ㅎㅎ! 튜플은 값을 변경할 수 없다고 해주셨는데요! 스왑도 결국은 값을 변경하는 개념 아닌가요! 변경할 수 없는데 스왑만 가능하다고 생각하면 올바르게 이해된걸까요?
원본이 바뀌는 것이 아니라, 원본을 기반으로 새로운 튜플을 만들어낼 뿐입니다!
(a, b) 와 (b, a)가 서로 다른 튜플이란 말씀인가요?
튜플에 대한 정리 깔끔하게 정리되었네요
감사합니다.
200번째 조아요는 제꺼!!
일주일 동안 37강까지 열심히 달렸습니다!! 배울수록 재밌네요ㅎㅎ
선생님 혹시 지난 번에 댓글로 문의한 내용 답변 달아주실 수 있으신가요!!
a= {
(0, 1): 10,
(0, 2): 20,
(0, 3): 30,
}
print(a[0, 1])
튜플은 소괄호 없이도 사용이 가능하니까 위 코딩을
a= {
0, 1: 10,
0, 2: 20,
0, 3: 30,
}
print(a[0, 1])
다음과 같이 괄호만 빼서 실행시켜주면
File "hello.py", line 2
0, 1: 10,
^
SyntaxError: invalid syntax
이렇게 구문 오류라고 나오는데 0, 1: 10 을 (0, 1): 10 으로 인식하는 것이 아니라 0 따로 1:10 따로 인식하는 건가요??
넵 문법적으로 스스로 이해를 하지 못해서 오류를 내는 것입니다.
프로그래밍 언어를 포함한 모든 언어에는 "될 것 같은데 안 되는 구문들"이 있는데 이런 것들은 외울수 밖에 없을 것 같습니다!
안녕하세요^^
좋은 아침 입니다.
강의 감사 드리구요.
좋은 하루 되세요^^
2021-01-28 : 20일부터 했는데 목표보다 지체 되었군요ㅠ 성실히 해야겠어요
이미 충분히 성실하십니다 @_@ !!!
아래 질문 댓글을 보다가 다중할당구문이라고 하셔서 궁금한 게 있는데
강의에서 어떠한 여러 개의 값들을 한번에 할당할 때
튜플을 사용한다고 말씀하셨는데
교재 249페이지의 예제 코드에서 tuple_test = 10, 20, 30, 40을
type()함수로 확인해보면 튜플이라고 나오는데
a, b, c = 10, 20, 30 같은 형태는 TypeError라고 뜨면서 안되는데 그럼 튜플이 아닌 건가요?
그냥 a, b, c라는 각각의 변수에 10, 20, 30이라는 각각의 값들을 한 번에 할당해준건가요?
아래 코드를 어떤 식으로 type() 함수로 검사하셨는지 알 수 있을까요? type으로 전체를 감싸는 구문은 아예 불가능합니다.
해당 구문은 다중 할당 구문이라는 구문으로 왼쪽에 튜플, 오른쪽에 튜플을 넣고 할당했을 때 다중 할당이 일어나는 구문입니다. 튜플 자체는 자료(단어의 종류)이고, 다중할당구문 전체는 문장(단어들이 모여 구조화된 것)입니다.
마치
- "주어 동사 목적어"로 놓으면 된다
- "튜플(또는 리스트) = 튜플(또는 리스트)"로 놓으면 된다
하는 문장이라 type() 함수로 전체를 감싸서 검사할 수는 없습니다(type() 함수는 단어를 검사하는 것이므로)
@@윤인성
a, b, c = 10, 20, 30
print(type(a, b, c)) 이런 식으로 했었는데
TypeError: type.__new__() argument 1 must be str, not int 이라는 오류가 나오는데
제가 아직 이해를 못 한건지 튜플의 요소는 바꿀 수 없다고 알려주셨는데
tuple_test = 10, 20, 30, 40 형태에서는 요소 변경을 하려고 하면
변경이 안 된다면서 오류가 뜨는데 10, 20, 30, 40이라는 튜플 자료형을
tuple_test라는 이름의 변수에 저장한 거라고 이해해도 되는지는 잘 모르겠는데
a, b, c = 10, 20, 30 형태에서는 a = 40을 하고 출력하면 40 20 30으로 나오는데
책 249쪽에는 a, b, c = 10, 20, 30 코드에 주석으로
#괄호가 없는 튜플 활용이라고 적혀있는데
그럼 a, b, c = 10, 20, 30 같은 형태는 튜플이 아닌건가요?
@@LovePawPad
1. 튜플 강의에서 언급했던 것처럼 튜플은 원래 소괄호로 감싸서 만들며, 생략이 가능할 때(생략해도 다른 요소로 보이지 않을 때)만 괄호를 생략할 수 있습니다. type(a, b, c)는 type() 함수에 그냥 매개 변수 3개 때려 박은 것으로 인식해서 오류가 발생합니다.
2. 튜플의 요소는 변경할 수 없습니다. 지금 구문은 위에서 언급했던 것처럼 특수한 구문입니다. 튜플과 같이 생긴 것을 사용하는 그냥 다중 할당 구문이라고 이해해주세요.
동영상과 책을 같이 병행하면서 공부하니깐? 너무 좋네요...
그래도 연습문제는 뒤로 갈 수록 힘드네요 ㅠㅠ
앞으로 혼공파 씨리즈 팬이 될 듯 합니다.
다른 책들은 매번 손만대다가 말았는데(자바스크립트, 펄, 액셀매크로) ... 장식용입니다.^^;
나이를 먹어갈 수록 공부가 점점 힘이 들지만...
그래도 인성님 덕분에 10여일만에 이만큼 진도가 나갔습니다.
파이썬 만큼은 제대로 끝내보고 싶네요...^^
강의 감사합니다.
KI-BEOM KIM 감사합니다...! 딱 함수 부분까지만 어려우니 힘내세요 "-" ...!
궁금해서 댓글 남겨요..
1 : [a, b] = [10, 20]
2 : (c, d) = (30, 40)
3 :
4 : print(type(a)) #
5 : print(type(b)) #
6 : print(type(c)) #
7 : print(type(d)) #
c와 d의 데이터 타입이 튜플인줄 알았는데 int로 출력 됩니다. 혹시 이게 정상인가요?
소괄호('()')나 대괄호('[]') 를 사용하는게 데이터 타입이 아니라 복합 할당을 위한 형식으로 이해하면 될까요?
넵! 이런 문법은 그냥 "별도의 문법"으로 기억해주시는 것도 좋습니다!
@@윤인성 우와!! 빠른 답변 감사드려요.
말씀해주신것처럼 그냥 받아들이고 다음 강의 보고 있습니다 ㅎㅎ 감사합니다.
ㅋㅋ 대학교때 있었던 에피소드 재밌네요.. 종종 얘기해 주세요~~
def test():
return 10,20
a,b=test()
print(test())
이 예시에서 test()=a,b라고 작성하고 코드를 실행했더니,
test()=a,b
^
SyntaxError: cannot assign to function call 이러한 오류가 나왔습니다. test()=a,b와 a,b=test()의 차이는 무엇인지 알려주시면 감사하겠습니다:)
= 연산자는 방향성을 갖는 연산자로서 오른쪽의 값을 왼쪽의 변수에 넣는 것입니다.
test() = a, b는
10, 20 = a, b라서 왼쪽이 변수가 아니라 오류가 발생합니다.
a, b = test()는 왼쪽이 변수이므로 오류가 발생하지 않습니다.
감사합니다
실험
강의 잘 듣고 있습니다. 튜플은 내용을 변경할 수 없다고 앞에서 설명해 주셨는데 스왑을 하는 부분에서 a, b = b, a로 바뀌는 부분은 내용을 변경하는 부분이 아닌건가요? (a, b) = (b, a)라는 형식으로 바꾸는 걸로 생각되서 질문드립니다.
한 번 만든 튜플을 만들 수 없는 것이고, 새로 만들면서 무언가를 하는 것은 가능합니다.
(a, b) = (b, a)는 새로운 튜플 2개를 만들면서 교환하는 형태라서 괜찮습니다..!
PS. 사실 위의 구문은 정확하게는 튜플을 만드는 것은 아니고, 그냥 "다중 할당 구문"이라는 특수한 형태로 내부에서 읽혀져서, 아예 특수한 구문으로 생각하셔도 됩니다!
질문에 대해서 답을 전부해주지는 않으시나요? 244페이지에서는 type([]) == list라고 코딩했는데 173페이지에서는 type([]) is list라고 했는데 어떻게 다른가요?
클래스와 인스턴스를 배울 때에 차이가 나오는데
==는 같은지 확인
is는 상속을 받는 클래스인지 확인할 때 쓰입니다.
기본적으로 같은 것이라고 보셔도 됩니다.
매일 질문이 20개 정도 와서 가끔 놓치는 경우가 있습니다 😭[또는 질문에 코드가 들어가서 유튜브가 스팸처리해서 못 보는 경우도 있습니다][그리고 본업이 따로 있다보니 질문답변에 2-3일 걸릴 때도 있습니다].
ㅋㅋㅋㅋㅋㅋㅋㅋㅋ와 진짜 클라스.....
밑 댓글에 스왑관련한 질문이 있는데, '다중할당구문으로 이해를 해라'라는 댓글 답변봐도 잘 이해가 안되어서요...
a,b=10,20 이면 이미 튜플 선언한거이기 때문에 값 변경이 안되는게 맞지않나요?...
a,b=b,a 어떻게 이렇게 스왑이 가능한건가요?...
튜플이라고 보지 말고, (a,b) = (1,2) 등의 특별한 구문이 있다고 봐주세요...!
@@윤인성 넵!
선생님. 여쭙고 싶은 것이 있는데요, 9분 50초대에서 한번에 튜플 "("를 리스트 "["로 어떻게 바꾸시나요?
5강인가 6강 마지막 부분에서 다루는데, Ctrl + Alt 누르고 방향키 위 아래 누르시면 여러 줄이 한 번에 잡힙니다!
@@윤인성 감사합니다.:)
강의 잘 보고 있습니다!
질문 있습니다.
마지막에 설명해주신 딕셔너리안에 튜플이 들어갈 때는
a = {
0,0 : 10,
0,1 : 20,
1,0 : 30,
1,1 : 40
}
이런식으로 괄호를 제거하면 오류가 생기는데, 딕셔너리의 키를 지정할 때는 괄호를 제거하면 안되는 것인가요?
넵! 사실 이런걸 모두 기억하는건 거의 불가능해서
오류가 발생하면 → "아 안되나보네"하고 맞게 수정해주시면 됩니다!
튜플 내에서 요소끼리의 자리는 변경 가능한건가요?? 요소 자체의 값을 변경할 수는 없구요?
이채현 한 번 정의되면 아무 조작도 안 됩니다...!
@@윤인성 그쵸,,?? 스왑의 원리를 잘 모르겠습니담
이채현 튜플을 사용한 스왑은 튜플을 어떻게 조작하는 것이 아니라, 그냥 "파이썬의 다중 할당 구문이 이렇게 생겼다(튜플을 사용하는 것처럼)"라고 기억하시는 것도 좋습니다...! (a, b) = (1, 2)에서 오른쪽은 튜플인데, 왼쪽은 그냥 다중 할당 구문입니다(따라서 왼쪽은 이게 튜플을 어떻게 조작하는 것은 아닙니다).
@@윤인성 아아ㅏ아 알것같아요 감사합니다!!! 강의 잘듣고 있습니담ㅎㅎ