반응형

파이썬 공식문서

list.append(x)
리스트의 끝에 항목을 더합니다. a[len(a):] = [x] 와 동등합니다.

list.extend(iterable)
리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장합니다. a[len(a):] = iterable 와 동등합니다.

직접 해보기

int로 이루어진 list

my_list_1 = [1, 2, 3]
my_list_2 = [4, 5, 6]

 

 

my_list_1.append(my_list_2)
print(my_list_1)
[1, 2, 3, [4, 5, 6]]

-> my_list_2 의 항목이 한번에 들어가서 2중 리스트의 형태를 만든다

my_list_1.append(4)
print(my_list_1)
[1, 2, 3, 4]

-> 4가 리스트로 감싸지지 않아 바로 리스트에 들어간다

my_list_1.extend(my_list_2)
print(my_list_1)
[1, 2, 3, 4, 5, 6]

-> my_list_2의 항목이 순서대로 돌며 my_list_1의 뒤에 추가된다

my_list_1.extend(4)
print(my_list_1)
my_list_1.extend(4)
TypeError: 'int' object is not iterable

-> 4는 iterable한 인자가 아니라 TypeError를 일으킨다

 

str으로 이루어진 list

my_list_3 = ['apple', 'banana']
my_list_4 = ['coffe', 'milk']

 

my_list_3.append(my_list_4)
print(my_list_3)
['apple', 'banana', ['coffe', 'milk']]

-> my_list_4의 항목이 리스트 통채로 들어간다

my_list_3.append('grape')
print(my_list_3)
['apple', 'banana', 'grape']

-> grape 항목이 그대로 추가된다

my_list_3.extend(my_list_4)
print(my_list_3)
['apple', 'banana', 'coffe', 'milk']

-> 리스트의 항목이 개별적으로 추가된다

my_list_3.extend('grape')
print(my_list_3)
['apple', 'banana', 'g', 'r', 'a', 'p', 'e']

-> 문자열 'grape'를 돌며 요소 하나하나씩 list에 추가된다

 

 

개인적인 생각으론 .append()는 입력된 값을 통채로 집어넣는다

.extend()는 입력된 값을 순회하며 값을 하나씩 분리해서 집어넣는다고 느끼면 될 것 같다

반응형
반응형

list에서 사용할 수 있는 메서드들을 복습겸 정리해봤다

dir(list)

dir(list)로 리스트에서 사용할 수 있는 메서드들을 모두 출력해서 확인 할 수 있다

list_method = dir(list)
print(list_method)

실행결과

'__add__', '__class__', '__class_getitem__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__','append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'

append(x)

리스트에 요소 추가

my_list.append(10)
print(my_list)
[1, 3, 5, 7, 9, 8, 4, 6, 2, 10]

copy()

리스트 복사

my_list_2 = my_list.copy()
print(my_list_2)
[1, 3, 5, 7, 9, 8, 4, 6, 2, 10]

복사된 리스트 변경해보기

my_list_2[0] = 11
print(my_list_2)
print(my_list)
[11, 3, 5, 7, 9, 8, 4, 6, 2, 10]
[1, 3, 5, 7, 9, 8, 4, 6, 2, 10]

-> .copy()를 통해 복사한 리스트는 다른 id 값을 가지고 있어서 복사본의 변경이 영향을 미치지 않는다

count(x)

리스트가 가지고 있는 x 의 갯수 세기

print(my_list.count(1))
1

extend(iterable)

리스트의 뒤에 iterable한 항목을 추가

my_list.extend(my_list_2)
print(my_list)
[1, 3, 5, 7, 9, 8, 4, 6, 2, 10, 11, 3, 5, 7, 9, 8, 4, 6, 2, 10]

index(x)

입력된 인자의 위치 반환

print(my_list.index(1))
0

insert(x,y)

x자리에 y를 입력해줌

my_list.insert(0,30)
print(my_list)
[30, 1, 3, 5, 7, 9, 8, 4, 6, 2, 10, 11, 3, 5, 7, 9, 8, 4, 6, 2, 10]

pop(x)

입력된 값을 빼줌

my_list.pop(11)
print(my_list)
[30, 1, 3, 5, 7, 9, 8, 4, 6, 2, 10, 3, 5, 7, 9, 8, 4, 6, 2, 10]

()안에 입력을 하지 않으면 마지막 값을 지운다

my_list.pop()
print(my_list)
[30, 1, 3, 5, 7, 9, 8, 4, 6, 2, 10, 3, 5, 7, 9, 8, 4, 6, 2]

remove(x)

입력된 값을 빼줌

my_list.remove(10)
print(my_list)
[30, 1, 3, 5, 7, 9, 8, 4, 6, 2, 3, 5, 7, 9, 8, 4, 6, 2]

값이 없으면 에러를 일으킨다

my_list.remove(100)
print(my_list)
my_list.remove(100)
ValueError: list.remove(x): x not in list

sort()

리스트를 정렬해준다

my_list.sort()
print(my_list)
[1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 30]

리스트가 문자열로 이루어진 경우

my_list_3 = ['1', '2', '3', '5', '10', '11', '12', '22', '33', '34']
my_list_3.sort()
print(my_list_3)
['1', '10', '11', '12', '2', '22', '3', '33', '34', '5']

reverse()

리스트를 뒤집어서 출력해준다

my_list.reverse()
print(my_list)
[30, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1]

clear()

리스트 항목 삭제(리스트 자체를 삭제하는건 아니다)

my_list.clear()
print(my_list)
[]

 

복습복습

반응형
반응형

python으로 369게임 만들어보기

숫자를 입력하면 369 게임 결과가 문자열로 출력되도록 만들어보았다

n = int(input())
game_list = ''
fin = ''

for i in range(1, n+1):
    game_list += (str(i)+' ')
    game = game_list.split(' ')
for i in range(0, n):
    if '3' in game[i] or '6' in game[i] or '9' in game[i]:
        game[i] = '짝'
game.pop(-1)
for i in range(0, n):
    fin += game[i] + ' '
print(fin)

'3' '6' '9'가 문자열에 속하면 짝을 출력하게 만들었다

 

문자열로 출력을 하려고 어찌저찌 하다보니깐 상당히 비효율적인 코드가 만들어졌다.

 

일단 int 로 숫자를 받아서 -> 받은 숫자의 길이만큼 생성되는 리스트를 만들어주고 -> split를 이용해서 만들어진 리스트를 띄어쓰기를 기준으로 문자열로 다시 바꿔준 후 -> 만들어진 리스트를 돌며 '3' '6' '9' 가 속해있다면 짝으로 변경해준다

띄어쓰기를 기준으로 문자열로 바꿔주는 과정에서 공백문자 하나가 리스트에 추가가 되어서 .pop()을 이용해 가장 마지막에 있는 공백 리스트를 제거해 준 후 -> 다시 for 문을 동해 3,6,9가 짝으로 바뀐 문자열을 돌아 문자열에 추가해준다

그리고 문자열 출력

 

 

형변환 과정만 몇번을 거쳐야하는 매우 비효율 적인 코드 완성...

생각해보니... 33 36 39 같이 369가 2개가 중첩되는 구간은 '짝' 이 아니라 '짝짝'이 출력되게 해야하네...

그런식으로 코드를 짜려면 코드를 살짝 수정하는게 아니라 전반적인 풀이 방법을 아예 바꿔야 할 것 같다

 

 

 

반응형

+ Recent posts