1. indexing

oddnumber = [1, 3, 5, 7, 9]
cafes = ["star", "bene", "yoger", "friends"]
A = [1, 5, "A", "CC", "B"]
listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, "ABC"]

a = oddnumber[3]  # 7
b = cafes[1]  # bene
c = A[2]  # A
d = listInList[0][1]  # 리스트 내 리스트 접근, 3

print(a)
print(b)
print(c)
print(d)

print(a + d, oddnumber[4] + listInList[4])  #숫자 + 숫자 연산 가능
print(b + c) #문자열 + 문자열: 문자열 합하기

 

7
bene
A
3
10 12
beneA

 

2. slicing

oddnumber = [1, 3, 5, 7, 9]
cafes = ["star", "bene", "yoger", "friends"]
A = [1, 5, "A", "CC", "B"]
listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, "ABC"]

a = oddnumber[1:5]
b = cafes[1:]
c = A[:2]
d = listInList[0][1:4]

print(a)
print(b)
print(c)
print(d)

 

[3, 5, 7, 9]
['bene', 'yoger', 'friends']
[1, 5]
[3, 5, 6]

 

3. 리스트 연산

evennumbers = [2, 4, 6, 8, 10]
oddnumbers = [1, 3, 5, 7, 9]

numbers = evennumbers + oddnumbers
print(numbers)
print(numbers * 4)
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

 

4. 리스트 수정

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

numbers[4] = 100
print(numbers)

numbers[2] = "hello"
print(numbers)

numbers[0] = numbers[9] #인덱스 9를 인덱스 0에 대입
print(numbers)

numbers[8] = ['a', 'b', 'c'] #리스트 전체를 형태 유지하며 대입
print(numbers)

 

[2, 4, 6, 8, 100, 1, 3, 5, 7, 9]
[2, 4, 'hello', 8, 100, 1, 3, 5, 7, 9]
[9, 4, 'hello', 8, 100, 1, 3, 5, 7, 9]
[9, 4, 'hello', 8, 100, 1, 3, 5, ['a', 'b', 'c'], 9]

 

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

'''
numbers[4:5] = 80
Traceback (most recent call last):
  File "d:\workspace-python\groom\groom.py", line 3, in <module>
    numbers[4:5] = 80
TypeError: can only assign an iterable
'''

numbers[4:5] = [80]
print(numbers)

numbers[4:5] 는 인덱스 4만 가져오지만 리스트로 판단되기 때문에, 슬라이싱으로 값을 수정할 때는 단일 값이 아닌 리스트로 대입해야 한다.

 

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

numbers[2:6] = "hello"
print(numbers)
[2, 4, 'h', 'e', 'l', 'l', 'o', 3, 5, 7, 9]

nubers[2:6] = "hello" 에서 "hello"는 하나의 문자열이자 문자 집합이다. 따라서 슬라이싱으로 값을 대입할 때 슬라이싱한 범위에 문자열의 문자를 순차적으로 하나씩 대입한다.

 

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

numbers[2:3] = ["a", "b", "c"]
print(numbers)

numbers[8] = ["a", "b", "c"]  # 리스트 전체를 형태 유지하며 대입
print(numbers)
[2, 4, 'a', 'b', 'c', 8, 10, 1, 3, 5, 7, 9]
[2, 4, 'a', 'b', 'c', 8, 10, 1, ['a', 'b', 'c'], 5, 7, 9]
  • numbers[2:3] = ['a', 'b', 'c'] 와 같이 슬라이싱한 범위에 리스트를 넣으면 대입할 리스트의 구성 요소들이 numbers 에 완전히 포함된다.
  • 그러나, numbers[8] = ['a', 'b', 'c'] 는 리스트 내 리스트 형태로 수정된다.

⭐⭐⭐ 인덱싱과 슬라이싱의 차이점을 확실히 하자!!

 

5. 리스트 삭제

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

# 값만 삭제
numbers[3] = ""
print(numbers)
[2, 4, 6, '', 10, 1, 3, 5, 7, 9]

 

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

# 요쇼 삭제
numbers[1:3] = []
print(numbers)
[2, 8, 10, 1, 3, 5, 7, 9]

 

numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]

a = "goorm"

#공간까지 삭제
del numbers[4]
print(numbers)

del numbers[:5]
print(numbers)

#객체 자체를 삭제
del a
[2, 4, 6, 8, 1, 3, 5, 7, 9]
[3, 5, 7, 9]

del 키워드를 통한 삭제도 가능하지만, del 키워드는 객체 자체를 삭제한다는 차이를 가진다.

 

5. 리스트 값 할당

리스트를 선언하고 사용하는 방법에는 두 가지가 있다.

 

  1. a = [ ] 혹은 a = list( ) 형식으로 빈 리스트 생성
  2. a = [1, 2, 3, 4, 5] 혹은 a = list([1, 2, 3, 4, 5]) 형식으로 리스트 생성과 동시에 값 할당
# 잘못된 코드
drawer = []
drawer[0] = "양말"

# 올바른 코드
drawer = []
drawer.append("양말")
print(drawer, drawer[0]) # ['양말'] 양말

drawer = [ ]로 빈 리스트를 만들고 나서 drawer[0] = "양말" 이렇게 코드를 실행하면 IndexError: list assignment index out of range가 발생한다.

이유는 파이썬 리스트는 해당 인덱스가 존재해야만 값을 대입할 수 있기 때문이다. 빈 리스트는 아무 요소도 없기 때문에 drawer[0]은 존재하지 않고, 없는 위치에 값을 할당하려고 하면 에러가 난다.

 

drawer = []

# 요소 1개 추가
drawer.append("양말")

# 여러 요소 추가
drawer.extend(["속옷","모자","반팔","바지"])
print(drawer)

여러 값을 한 번에 추가하기 위해서는 extend( )함수를 사용하면 된다.

 

drawer = ["양말", "속옷", "모자", "반팔", "바지"]

# del 키워드는 index 자체를 삭제
del drawer[3]
print(drawer)

drawer[3] = ""
print(drawer)

drawer[3] = "점퍼"
print(drawer)

del 키워드는 값을 완전히 삭제한다.

+ Recent posts