후... 힘들었습니다. - 게으른
참고한 곳: 스택오버플로우 리스트 컴프리헨션(LC)에 if만 있을 때는 왜 if가 맨 뒤로 가고 [i**2 for i in range(10) if i%3 == 0] if와 else가 모두 쓰일 때에는 왜 if-else가 for보다 앞에 올까? [i**2 if i%3 == 0 else i*2 for i in range(10)] 한줄요약: if만 있는 것은 filter이고, if-else는 3항 연산자이기 때문이다. if만 있는 경우, if는 filter의 역할이다. 즉, filter를 통과한 것만 살아남는다. LC의 문법은 filter를 뒤에 쓴다. [ for in if ] 실제로 공식 문서를 보면 LC 뒤에 if가 추가될 수 있다고만 나오지, else는 언급되지 않는다. if-else는 그 자체로 하나의..
본 글의 코드는 여기에서 보실 수 있습니다. Q. 0부터 99까지 정수의 제곱수로 구성된 리스트를 생성하시오. A. 방법은 여러 가지가 있다. 우선 range 객체와 함수를 하나 만들어놓고 시작한다. def sq(x): return x**2 r = range(100) 처음 배우는 방법은 아래와 같이 리스트에 append를 하는 방식이다. # 쌩 for문 사용 l = [] for i in r: l.append(i**2) 리스트 컴프리헨션을 사용하면 훨씬 간단해진다. # list comprehension l = [i**2 for i in r] 만들어둔 함수 sq를 쓸 수도 있다. # 직접 연산 대신 함수 사용 l = [sq(i) for i in r] map은 이터러블의 각 요소에 함수를 적용시킬 수 있다. ..
세줄요약 증상: matplotlib.pyplot.bar()로 막대 그래프를 그릴 때 막대가 사라지거나 막대 사이의 틈이 없어지는 현상이 있음 원인: bar()는 막대의 위치를 1픽셀 단위로만 계산하는데, 막대 또는 틈이 너무 얇으면 무시하고 그리지 않음 해결책: bar()의 파라미터 중 width를 조절하고, 필요에 따라 figsize를 바꾸거나 edgecolor를 설정하거나 Figure 창의 크기를 조절 일러두기 본 글의 코드 중 캡쳐한 것은 코랩, 코드 블록은 vscode 또는 매트랩에서 실행한 코드입니다. 코드는 모두 여기에서 보실 수 있습니다. 감사의 글 본 글의 아이디어를 주신 페가님께 감사 말씀 드립니다. 이상한 막대 그래프 matplotlib의 bar()를 이용하여 간단히 막대 그래프를 그려..
나름 유명한 유머입니다. 이 유머의 포인트는 느낌표를 강조로 보느냐 factorial로 보느냐에 있습니다. 이과의 관점에서는 이라서 옳은 답이고, 문과의 관점에서는 이라야 옳은 답이 됩니다. 이런 유머가 가능한 숫자는 40, 32, 4 외에도 더 있습니다. 예를 들어 아래와 같은 조합도 가능합니다. [문제1] A - B÷2 = C!의 형태로 동일한 유머가 가능한 10000 이하의 자연수 A, B, C는 총 몇 쌍이 있을까요? 답은 총 3쌍입니다. 여러분도 한번 찾아보세요! [문제2] A - B÷D = C!의 형태로 동일한 유머가 가능한 2 이상 100 이하의 자연수 A, B, C, D는 총 몇 쌍이 있을까요? 역시 답은 총 3쌍입니다. 여러분도 한번 찾아보세요! - 게으른
2008년이니까 거의 15년 전 일이긴 합니다만, 파이썬에서 self를 불편해하던 분이 있었습니다. 그래서 제안을 하게 됩니다. 제목이 상당히 자극적이네요. “Redundant is not Explicit” 우리말로 하면 “과잉과 명시明示는 동의어가 아니다” 정도일까요? 이 분의 제안은 아래와 같습니다. 메서드 정의에 self를 강제하는 것은 파이써닉하지 않다. 적어도 메서드 입력 파라미터에서는 self를 없앨 수 있지 않을까? self를 키워드로 만들면 해결되지 않을까? 예를 들자면 class C: def meth(self, arg): self.val = arg return self.val 이렇게 쓰던 코드를 class C: def meth(arg): self.val = arg return self.v..
※ 본 글은 realpython의 정기메일 내용을 편집, 각색 및 내용추가한 것입니다. C나 Java를 먼저 배운 분이라면 시퀀스의 아이템에 인덱스를 아래와 같은 형태로 붙일 것입니다. for i in range(len(my_items)): print(i, my_items[i]) 파이썬에는 이 코드를 간단히 만들어주는 함수가 있습니다. 바로 enumerate()입니다. names = ['Antonio', 'Carlos', 'Jobim'] for index, value in enumerate(names): print(f'{index}: {value}') enumerate()의 기본 기능은 시퀀스의 각 아이템에 인덱스를 부여하는 카운터 변수를 자동생성해주는 것입니다. 위 코드에서는 index가 그 카운터 변..
본 글은 요약본입니다. 전문은 여기를 클릭! NumPy가 리스트보다 빠른 이유는? 1. 원소의 타입 Array의 원소로 정수 하나를 저장하려고 합니다. NumPy array의 경우 정수는 내장 자료형인 int로 저장되지 않습니다. 대신 binary로 변환 후 int32(4 byte)로 캐스팅 되어 저장됩니다. 숫자가 작아서 1 byte만 필요하다면 1 byte로 변환도 할 수 있습니다. 이 경우에는 정수 하나를 저장하는 데에 딱 1 byte만 필요하겠죠. 반면 리스트에 들어가는 정수는 내장 자료형 int 타입으로 저장됩니다. 이 int 타입 하나를 저장하려면 다음 것들이 모두 필요합니다. 1) Size (4 byte) 2) Reference Count (8 byte) 3) Object Type (8 by..
원문: Top 5 Mistakes You Make When Declaring Functions in Python (약간의 의역을 얹었습니다.) 어떤 프로그래밍 프로젝트에서든 함수는 핵심요소입니다. 잘 만들어진 함수는 코드의 가독성을 높이고 유지보수를 쉽게 만듭니다. 반대로 함수를 엉성하게 만들면 가독성이 떨어지고 유지보수 비용이 올라갑니다. 아무리 실력좋은 프로그래머라도 시간이 지나면 자신의 코드를 잊어버리기 마련이므로, 잘 작성된 함수는 프로젝트의 가치를 올려준다고 할 수 있습니다. 물론 파이썬도 예외가 아닙니다. 함수 작성 시 흔히 범하는 실수를 소개하겠습니다. 이 실수들을 이해하고 나면 가독성과 유지보수 면에서 향상된 코드를 짤 수 있을 것입니다. "가독성은 중요하다." - 파이썬 철학 (역자 주:..
※ 본업이 개발은 아니지만 코딩을 좋아하는 연구자의 입장에서 쓴 글임을 먼저 밝혀둡니다. 파이썬을 처음 공부하는 분들(특히 학생)이 정말 자주 하는 질문이 있습니다. "파이썬도 자격증이 있나요? 따두면 도움이 될까요?" "파이썬 잘하면 취업 잘되나요?" "기본서 다 봤어요. 이제 뭐 봐야 되나요?" 조금씩 다른 질문들이고 답변도 조금씩 다릅니다만, 이 질문들을 꿰뚫는 더 중요한 질문이 있습니다. "파이썬 배우면 나중에 뭘 할 수 있나요?" 현직에 계신 분들은 "이걸 배워서 어디다 써먹지?"라는 의문은 보통 갖지 않으실 겁니다. 이미 필요해서 배우고 계실테니까요. 하지만 학생분들은 필요해서 배운다기보다는 누가 시키니까 배우는 경우가 많습니다. 시키는 주체는 학교가 될 수도 있고 사회가 될 수도 있습니다. ..