list access
1
2
3
4
5
6
7
8
9
10
>>> x = [0,1,'hello',3,4]
>>> x[0]
0
>>> x[2]
'hello'
>>> m = [[1,2],[3,4]]
>>> m[0]
[1,2]
>>> m[0][0]
1
list and indexing
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> x = [0,1,2,3,4]
>>> print(x[0:1]) #0에서 부터 1전까지
[0]
>>> print(x[0:2])
[0, 1]
>>> print(x[0:5])
[0, 1, 2, 3, 4]
>>> print([x for x in range(0,5)])
[0, 1, 2, 3, 4]
>>> x[:]
[0, 1, 2, 3, 4]
>>> x[1:] #1부터 끝까지
[1, 2, 3, 4]
>>> x[1::2] #1부터 끝까지 2씩 증가 -> 증가할때는 오른쪽 끝
[1, 3]
>>> x[::-1] #끝부터 끝까지 1씩 감소 -> 감소할때는 왼쪽 끝
[4, 3, 2, 1, 0]
1
2
for i in range(1):
print(i)
0
1
2
for i in range(0,1):
print(i)
0
1
2
for i in range(0,10):
print(i)
0 1 2 3 4 5 6 7 8 9
1
2
x = list(range(0,10))
x
[0,1,2,3,4,5,6,7,8,9]
x[0] 에는 0
x[9] 에는 9
1
2
x = list(range(0,10))
x(0:2)
[0,1]
0에서 2까지
1
2
3
4
x = list(range(0,10))
y = x
x[0] = 10
[x,y]
[[10, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
왜 y의 0번째에 10이지?
똑같은 리스트를 가리키고 있기 때무네 같이 바뀜
그럼 x의 값을 다른곳에 복사하고 싶을땐 오또카딩
1
2
3
4
x = list(range(0,10))
y = x[:] #[t for t in x]와 같음
x[0] = 10
[x,y]
[[10, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
1
2
x = list(range(0,10,2))
x
[0, 2, 4, 6, 8]
1
2
x = list(range(0,10))
x[0:10:2]
[0, 2, 4, 6, 8]
1
2
x = [(x+1) * 10 for x in range(10)]
x
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
1
2
x = [(x+1) * 10 for x in range(10)]
x[0::2]
[10, 30, 50, 70, 90]
1
2
x = [(x+1) * 10 for x in range(10)]
x[9::-1]
[100, 90, 80, 70, 60, 50, 40, 30, 20, 10]
1
2
x = [(x+1) * 10 for x in range(10)]
x[9:0:-1]
[100, 90, 80, 70, 60, 50, 40, 30, 20]
1
2
x = [(x+1) * 10 for x in range(10)]
x[9:30:-1]
[100, 90, 80, 70, 60, 50, 40, 30, 20,10]
1
list(range(10,0,-1))
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
1
2
x = list(range(10))
x[::2]
[0, 2, 4, 6, 8]
1
2
x = list(range(10))
x[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
1
2
x = list(range(10))
x[::-2]
[9, 7, 5, 3, 1]
list and string
1
2
3
>>> s = 'This is right justified'
>>> print(mysplit(s))
['This', 'is', 'right', 'justified']
이걸 어떻게 하딩?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
s = 'This is right justified'
def mysplit(s):
lst = []
tmp = ''
for c in s:
if c != ' ':
tmp = tmp + c
else:
lst.append(tmp)
tmp = ''
if tmp != '': #문자열은 다 끝났는데 쌓아둔 단어가 있는지 확인
lst.append(tmp)
tmp = ''
return lst
print(mysplit(s))
More on string
문자열은 다양한 방식으로 나타낼 수 있음
1
2
3
4
5
"Hello"
'hello'
'''hello'''
'I am Elmo'
"I'm Elmo"
꾸오 더블쿼터로 싱글쿼터를 문자열로 만들수 이따
인용을 하고 싶을땐?
Commander has shouted fire를 Commander’s shouted “fire”
1
'''Commander's shouted "fire"'''
’'’로 더블쿼터랑 싱글쿼터 모두를 문자열로 만들어버림잼
class and method
1
2
3
4
5
6
coffee = Mypic()
coffee.read('coffee.png')
coffee.coffee
chelsea = Mypic()
chelsea.read('chelsea.png')
chelsea.coffee
attribute (쩜 뒤에 이름)는 아무 상관 없이 쩜 앞에 있는게 결과로 나옴
=> 첫번째에는 커피 사진 두번째엔 냥냥이 첼시 사진
The first argument of an instance method is a special argument which contain the instance
1
2
3
4
5
class Test:
def test(n):
return n + 1
Test.test(10)
11
x = Test()를 만들고 x.test()를 하면 에러남 <- self가 더할 수 있는 모습이 아님
test(10)만 쓰면 에러남 <- def test(n) 자체는 클래스 밖에 없기 때무네
클래스 안에 있는 함수를 Class Method라고 함
1
2
3
4
5
6
class Mypic:
def read(self,name):
return name+': file'
x = Mypic()
x.read('chelsea.png')
‘chelsea.png: file’
x가 self, 첫번째 파라미터가 name
1
2
3
4
5
6
7
8
class Mypic:
def read(self,name):
self.picname = name
return name+': file'
x = Mypic()
x.read('chelsea.png')
x.picname
‘chelsea.png’
class Mypic:
def read(self,name):
self.picname = name
return name+': file'
x = Mypic()
Mypic.read(x,'chelsea.png')
x.picname
‘chelsea.png’