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’