Python List 사용 방법 (append, remove, sorted, deep copy)

JS · 18 Feb 2020

List는 Python에서 제공하는 collection 중 하나입니다. List는 순서가 있고, 변경이 가능한 collection입니다. 다양한 타입의 객체들을 갖고 있을 수 있고, 또한 중복된 값도 허용됩니다.

List 생성

[ ]는 Item이 없는, empty List 객체를 생성합니다.

food = []
print(food)
# output: []

다음과 같이 Item을 함께 초기화할 수 있습니다.

food = ['pizza', 'hamburger']
print(food)
# output: ['pizza', 'hamburger']

다양한 타입의 객체를 List에 함께 추가할 수 있습니다.

food = ['pizza', 'hamburger', 1, 2, [4, 5, 6]]
print(food)
# output: ['pizza', 'hamburger', 1, 2, [4, 5, 6]]

Indexing

C++의 배열처럼 [index]로 List에 접근할 수 있습니다. 음수 Index는 List의 마지막에서 앞의 방향으로 계산하는 Index입니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
print(food[0])
print(food[1])
print(food[-1]) # index -1 => 3
print(food[-2]) # index -2 => 2

결과

pizza
hamburger
donuts
sandwich

Item 추가

append()는 인자로 전달되는 Item을 List 마지막에 추가합니다.

food = ['pizza', 'hamburger']
food.append('sandwich')
food.append('donuts')
print(food)
# output: ['pizza', 'hamburger', 'sandwich', 'donuts']

insert()는 인자로 전달된 Index에 Item을 추가합니다.

food = ['pizza', 'hamburger']
food.insert(1, 'muffin')
print(food)
# output: ['pizza', 'muffin', 'hamburger']

List에 Index로 접근하여 Item을 추가할 수 있습니다. [1:1]은 Index 1의 위치에 아이템들을 모두 추가한다는 의미입니다.

food = ['pizza', 'hamburger']
food[1:1] = ['sandwich', 'donuts']
print(food)
# output: ['pizza', 'sandwich', 'donuts', 'hamburger']

반면에, [2:4]는 Index 2를 포함하고 4를 포함하지 않는 범위(2이상 4미만)의 Item들을 대입되는 List로 교체한다는 의미입니다. 결과를 보면, Index 2와 3의 Item이 삭제되었고, 대입으로 전달된 List로 교체되었습니다.

food = ['pizza', 'sandwich', 'donuts', 'muffin', 'hamburger']
food[2:4] = ['apple', 'kiwi']
print(food)
# output: ['pizza', 'sandwich', 'apple', 'kiwi', 'hamburger']

다음 코드처럼 삭제되는 Item보다 추가되는 Item이 더 많을 수도 있습니다.

food = ['pizza', 'sandwich', 'donuts', 'muffin', 'hamburger']
food[2:4] = ['apple', 'kiwi', 'cookie']
print(food)
# output: ['pizza', 'sandwich', 'apple', 'kiwi', 'cookie', 'hamburger']

Item 변경

C++의 배열처럼 [index]로 Item에 접근하고 값을 변경할 수 있습니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food[0] = 'muffin'
print(food)
# output: ['muffin', 'hamburger', 'sandwich', 'donuts']

Item 삭제

remove()에 인자로 삭제할 Item을 전달하면 List에서 삭제가 됩니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food.remove('sandwich')
print(food)
# output: ['pizza', 'hamburger', 'donuts']

다음과 같이 Index의 범위를 지정하여 삭제할 수도 있습니다. [1:3]은 1을 포함하고 3을 포함하지 않는 Item들을 의미합니다. 그래서 결과를 보면 Index 1과 2의 Item이 삭제됩니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
del food[1:3]
print(food)
# output: ['pizza', 'donuts']

[:]처럼 숫자를 생략하면 List의 모든 아이템을 삭제합니다.

del food[:]
print(food)
# output: []

List의 모든 Item 추가

다음과 같이 두개의 List를 더하면, 모든 Item이 추가된 List 객체가 리턴됩니다.

food = ['pizza', 'hamburger']
food2 = ['apple', 'banana', 'kiwi']
all_food = food + food2
print(all_food)
# output: ['pizza', 'hamburger', 'apple', 'banana', 'kiwi']

extend()에 인자로 List를 전달하면 모든 Item이 List에 추가됩니다.

food = ['pizza', 'hamburger']
food2 = ['apple', 'banana', 'kiwi']
food.extend(food2)
print(food)
# output: ['pizza', 'hamburger', 'apple', 'banana', 'kiwi']

Clear

clear()는 List의 모든 아이템을 삭제합니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food.clear()
print(food)
# output: []

Reverse

reverse()는 배열의 순서를 반대로 변경합니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
print(food)
food.reverse()
print(food)

# output:
# ['pizza', 'hamburger', 'sandwich', 'donuts']
# ['donuts', 'sandwich', 'hamburger', 'pizza']

Slice

List에 [0:2]처럼 지정한 범위의 아이템들을 가져올 수 있습니다. [0:2]는 지금까지 사용했던 것처럼 Index 0을 포함하고 2를 포함하지 않는 구간입니다.

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print(alphabet[0:2])
print(alphabet[0:-2])
print(alphabet[3:6])

# output:
# ['a', 'b']
# ['a', 'b', 'c', 'd', 'e', 'f']
# ['d', 'e', 'f']

만약 [:6] 또는 [6:] 처럼 특정 위치의 숫자를 생략하면 Index 0 또는 마지막을 의미합니다. 둘다 생략하면 List의 모든 범위를 의미합니다.

alphabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
print(alphabet[:6])
print(alphabet[6:])
print(alphabet[:])

# output:
# ['a', 'b', 'c', 'd', 'e', 'f']
# ['g', 'h']
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']

Sorting

sort()를 사용하면 List를 정렬할 수 있습니다. 인자로 reverse=True를 전달하면 반대 방향으로 정렬을 할 수 있습니다.

number = [10, 100, 54, 72, 61]
number.sort()
print(number)
# output: [10, 54, 61, 72, 100]

number = [10, 100, 54, 72, 61]
number.sort(reverse=True)
print(number)
# output: [100, 72, 61, 54, 10]

문자열의 길이로 정렬하려면 다음과 같이 할 수 있습니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food.sort(key=len)
print(food)
# output: ['pizza', 'donuts', 'sandwich', 'hamburger']

자신이 만든 Sort 함수를 이용하고 싶으면 이렇게 하면 됩니다.

def myFunc(e):
    return len(e)

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food.sort(key=myFunc)
print(food)
food.sort(key=myFunc, reverse=True)
print(food)
# output:
# ['pizza', 'donuts', 'sandwich', 'hamburger']
# ['hamburger', 'sandwich', 'donuts', 'pizza']

원본 List를 변경하고 싶지 않으면 sorted()를 사용하면 됩니다. 정렬된 List를 리턴해 줍니다.

number = [10, 100, 54, 72, 61]
sorted_number = sorted(number, reverse=True)
print(number)
print(sorted_number)
# output:
# [10, 100, 54, 72, 61]
# [100, 72, 61, 54, 10]

List comprehension

List comprehension은 List를 간결하게 생성하는 방법을 제공합니다. 다음과 같이 for를 이용하여 특정 패턴의 Item들을 생성할 수 있습니다.

squares = [i * i for i in range(1, 10)]
print(squares)
# output: [1, 4, 9, 16, 25, 36, 49, 64, 81]

Deep Copy

food2 = food처럼 List를 대입하면, List가 깊게 복사(deep copy)된 것은 아닙니다. food에 Item을 추가하면 food2도 동일한 Item을 갖게 됩니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food2 = food
food.append('spaghetti')
print(food)
print(food2)

# output:
# ['pizza', 'hamburger', 'sandwich', 'donuts', 'spaghetti']
# ['pizza', 'hamburger', 'sandwich', 'donuts', 'spaghetti']

다음과 같이 Slice로 모든 아이템이 포함된 List 객체를 생성할 수 있습니다. 이제는 food에 Item을 추가해도 food2의 Item은 변경되지 않습니다.

food = ['pizza', 'hamburger', 'sandwich', 'donuts']
food2 = food[:]
food.append('spaghetti')
print(food)
print(food2)

# output:
# ['pizza', 'hamburger', 'sandwich', 'donuts', 'spaghetti']
# ['pizza', 'hamburger', 'sandwich', 'donuts']

참고

댓글을 보거나 쓰려면 이 버튼을 눌러주세요.
codechachaCopyright ©2019 codechacha