프로그래밍/python

8. ASCII art, list (in, del, list of list, split, reverse, append, remove, len, sort, sorted)

서몰알 2021. 12. 29. 22:03

8.1 아스키 코드

아스키의 의미는

American Standard Code for Information Interchange 라고 한다..,

8.2 list

리스트에는 여러 가지 값을 한 번에 저장할 수 있다.

The most useful concept 이라고 교수님께서 설명하실 정도로 아주아주 중요!

spam = ['apples', 'oranges', 'grapes']

처럼 저장할 수 있다.

하나의 리스트에 string형, float형, int형을 다 넣을 수 있다.

각각의 들어있는 individual value 들은 item 이라고 부른다.

그 item들을 부르기 위해서는 index를 이용할 수 있는데, 0부터 순서대로 []를 이용해 부를 수 있다.

 

spam = ['apples', 'oranges', 'grapes']  # 이렇게 리스트를 세워주면
spam[0]  # 이건 'apples'이고
spam[1]  # 이건 'oranges'이다.

spam[4] # 이건 index 범위를 넘어가서 Index error가 발생한다

리스트에 한번에 여러가지 item들을 저장해두는 게 편한 이유는

리스트가 없으면 하나의 item을 전부 ~~ 다 각각의 변수를 세워 만들어줘야 하는 번거로움을 줄여주기 때문이다.

list이름[index번호] << 이걸 그냥 변수로 봐주고 다른 변수들처럼 이용해주면 된다.

문자열 형태의 아이템 두개를 연결하고 싶으면

>>> spam[0]+spam[1]

'applesoranges'

이런식으로!

내가 만든 리스트 spam에는 index가 2까지 있는데(0,1,2) 만약 2보다 큰 숫자를 인덱스에 넣고 무리하게 불러오려 하면 index error가 발생한다.

list는 바꿀 수 있는 자료형이다(mutable) <<< 몰랐는데 나중 가니까 되게 중요한 거였다!

만약 내가 만든 리스트 spam에 있는 'oranges'를 'peaches'로 바꾸고 싶으면

 

spam[1] = 'peaches'

이렇게 해주면 된다.

세상에 이렇게 간단할수가!

list concatenation 리스트를 이어주는 것이다.

중요성은 잘 모르겠지만 배웠으니까!!

 

list1 = [1, 2, 3, 4]
list2 = ['I', 'want', 'to', 'sleep']

list1 + list2   # 혹은
[1, 2, 3, 4] + ['I', 'want', 'to', 'sleep']  #이렇게

하면!

[1, 2, 3, 4, 'I', 'want', 'to', 'sleep']

이런 리스트가 만들어진다

in operator

리스트 안에 내가 원하는 값이 있나 확인하는 연산자? 이다.

 

spam = ['apples', 'oranges', 'grapes'] 
'apples' in spam

True

하고 나온다.

만약 내가 'apples' in spam 이라고 안하고 apples in spam 이라고 하면 어떻게 될까? (따옴표 제거)

False 하고 나온다. string은 string인걸 표시하기 위해 따옴표가 꼭 필요하고 따옴표가 없으면 변수 이름 같아진다.

 

궁금해서 해봤다. 당연한 결과겠지만.. 이해에는 더 도움이 될 것 같아서..

이거는 list라서 단어의 구성 문자열 (예: 'ora')가 있냐고 물어보면 없다고 한다.

 

당연히 띄어쓰기된 것도 문자열이니까!! 자연스럽게 받아들이면 된다.

del statement

이거는 list에서 필요없는 걸 삭제해주는 것이다.

교수님 예시가 이해하기 편해서 그대로 가져왔다.

계속 연속해서 index가 1인 값을 지우고 있는데, 하나씩 사라지는 모습을 볼 수 있다.

리스트에서 무엇인가 변화를 주면 바뀐 것에서 index도 함께 변한다는 것을 관찰할 수 있는 대목이다.

lists of lists

놀랍게도 list들을 하나로 엮은 list도 만들 수 있다!

bts = ['남준', '석진', '윤기', '호석', '지민', '태형', '정국']
blackpink = ['지수', '제니', '리사', '로제']
itzy = ['류진', '예지', '유나', '채령', '리아']

idol = [bts, blackpink, itzy]

반대로

저 이중 리스트에서 이름을 지정할 수도 있다.

 

idol = [['남준', '석진', '윤기', '호석', '지민', '태형', '정국'], 
['지수', '제니', '리사', '로제'], ['류진', '예지', '유나', '채령', '리아']]
bts = idol[0]
blackpink = idol[1]
itzy = idol[2]

이건 2차원이라고 보면 된다.

알겠죠?

listoflist[n][m]

에서 n은 내가 만든 걸로 보면 각 아이돌 그룹의 인덱스, m은 그 아이돌 그룹 멤버의 인덱스이다.

문자열 쪼개기

split()를 사용하면 쪼개서 저장된다. -> list 로!!

reverse()

위의 nct_dream이라는 리스트를 거꾸로 만들고 싶다면?

다른 변수에 저장하는 게 아니고 reverse()를 뒤에 붙이면 그 리스트 자체가 거꾸로 재저장됨을 기억하자..

append()

리스트에 원하는 값을 추가하고 싶을 때 사용할 수 있다.

무한 확장되는 nct와 잘 어울리는 method이다..

한번에 여러개를 넣고 싶으면

listname.append([a,b])

이런식으로 리스트 형태로 만들어서

remove()

list에서 내가 원하는 값을 삭제할 수 있다.

fruits = ['apples', 'banana', 'oranges']
fruits.remove('oranges')
print(fruits)   #['apples', 'banana']

 

len()

리스트 안에 item 이 몇 개 들어가 있는지 보여준다.

animals = ['dog', 'cat', 'cow', 'horse']
print(len(animals))   #4

people = ['Alice', 'Bob']
print(len(people))  #2

print(len(animals) + len(people))   #6

이차원 형태의 리스트에 len을 씌우면

animals = [['chicken', 'duck'], ['monkey', 'dog', 'pig']]
print(len(animals))   #2

list index

index 부분은 문자열 설명할때 정말 정말 열심히 자세히 설명해뒀다!! range에도~~

language = ['python', 'C', 'C++', 'Java', 'R']
print(language[1:3])        #['C', 'C++']
print(language[-2:])        #['Java', 'R']

language[0:3] = 'C#'       
print(language)             #[0:3] 자리에 있는 'python', 'C', ,'C++'이 사라지고 'C','#',공백이
                             #들어가서 ['C', '#', 'Java', 'R']가 출력됨
a = ['too', 'short', 'Life', 'is']
b = a[2:] + a[0:2]    #['Life', 'is', 'too', 'short']
b = a[0:2] + b[2:]    #['too', 'short', 'too', 'short']

list comprehension

반복문을 이용해서 같은 리스트를 만드는 방법

1. 빈 리스트를 하나 만들어주고 for문 안에서 append 함수를 통해 리스트 늘려주기

2. 리스트를 선언하는 줄에 for문을 넣어 값을 넣어주기

# Raw for loops 
squares = []
for i in range(10):
    squares.append(i*i)

print(squares)             # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

# List comprehension
squares = [i*i for i in range(10)]

print(squares)             # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

sort , sorted

x.sort() 는 기존의 리스트 값을 변경한다. -> 상자 내부를 정리한다.

sorted(x) 는 정렬된 신규 데이터를 만든다. -> 새로운 상자를 만든다. 기존 자료를 건드리지 않는다.

기존 자료를 보존하고 싶으면 sorted()를 사용한다.

sorted(정렬할 것 이름, 정렬기준)

원하는 정렬 순이 반대라면

sorted(정렬할 것 이름, 정렬기준 = True)

원하는 정렬 기준이 있다면

sorted(정렬할 것 이름, key = 기준이름) -> sort에서도 쓸 수 있다.

data = [3, 5, 1, 10, 9]
sorted_data = sorted(data)
print(sorted_data)

sorted_data = sorted(data, reverse = True)
print(sorted_data)

data = [{"name" : "Max", "age" : 6},
        {"name" : "Lisa", "age" : 10},                # 여기서 data의 타입은 list이다
        {"name" : "Max", "age" : 9}]                  # dictionaries를 포함하는 list
sorted_data = sorted(data, key=lambda x: x["age"])    # lambda는 13에서 소개함
print(sorted_data)

[1, 3, 5, 9, 10]

[10, 9, 5, 3, 1]

[{'name': 'Max', 'age': 6}, {'name': 'Max', 'age': 9}, {'name': 'Lisa', 'age': 10}]