본문 바로가기

프로그래밍/python

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

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}]

 

 

'프로그래밍 > python' 카테고리의 다른 글

10. tuples, sets  (0) 2021.12.30
9. dictionaries  (0) 2021.12.29
7. lower(), upper(), recursive function  (0) 2021.12.29
6. function definition, function call, local/global variables (import time)  (0) 2021.12.29
5. nested loop  (0) 2021.12.29