list에서 element를 제거할 때는
특정 index의 element를 제거하거나
특정 value의 element를 제거할 수 있습니다.
* index 기준
1) del
list에서 삭제만 하는게 필요한 경우는 del을 이용하면 됩니다.
fruits = ['apple', 'banana', 'peach']
del fruits[1]
print(fruits)
['apple', 'peach']
fruits = ['apple', 'banana', 'peach']
del fruits[1:3]
print(fruits)
['apple']
2) list에서 삭제하고, 삭제한 값을 뽑아서 사용하려는 경우는 pop을 이용
fruits = ['apple', 'banana', 'peach']
p = fruits.pop(1)
print(fruits)
print(p)
['apple', 'peach']
banana
3) list comprehension
fruits = ['apple', 'banana', 'peach']
fruits = [element for index, element in enumerate(fruits) if index not in [1]]
print(fruits)
['apple', 'peach']
* value 기준
1) if문 활용해서 새로운 list 짜기
fruits = ['apple', 'banana', 'peach']
new_fruits = []
for i in fruits:
if i != 'banana':
new_fruits.append(i)
print(new_fruits)
2) list를 copy해서 카피한 list를 for문을 돌면서 value 삭제
우선 list를 그냥 for 돌리면서 element를 제거해주면 될거 같은데 왜 copy해서 돌아야 될까요?
remove를 실행해주는 list는 기존 list가 유지되지 않고 remove가 적용된 결과로 변하기 때문입니다.
numbers = [1,2,3,4,5,6,7,8,9,10]
new_numbers = numbers.remove(1)
print(new_numbers)
print(numbers)
None
[2, 3, 4, 5, 6, 7, 8, 9, 10]
new_numbers 가 None이 나오고
numbers가 1이 제거된 결과가 나옴을 확인 가능합니다.
이런 특징을 염두에 두고 아래와 같이 for문 안에서 remove를 적용해 봅시다
numbers = [1,2,3,4,5,6,7,8,9,10]
for i in numbers:
if i < 5:
numbers.remove(i)
print(numbers)
[2, 4, 5, 6, 7, 8, 9, 10]
원하는 결과값은 [6,7,8,9,10] 이었겠지만 그렇게 나오지 않습니다.
첫번째 for문을 돌면서 0번째 index에 위치한 1을 지우고 나면 numbers의 index 0번째 element가 2로 바뀝니다
두번째 for문을 돌면서 1번째 index에 위치한 값은 3이 되고 3을 지우고 나면 numbers의 index 1번째 element가 4로 바뀝니다.
이와 같은식으로 index-value 가 바뀌게 되면서 우리의 의도대로 list에서 element가 제거 되지 않게 됩니다.
이때문에 list를 copy해서 for문 안에서 remove를 해야 합니다.
numbers = [1,2,3,4,5,6,7,8,9,10]
for i in numbers.copy():
if i < 5:
numbers.remove(i)
print(numbers)
[5, 6, 7, 8, 9, 10]
copy() 대신에 [:]을 사용할 수도 있습니다.
numbers = [1,2,3,4,5,6,7,8,9,10]
for i in numbers[:]:
if i < 5:
numbers.remove(i)
print(numbers)
[5, 6, 7, 8, 9, 10]
3) list comprehension
numbers = [1,2,3,4,5,6,7,8,9,10]
numbers = [number for number in numbers if number > 4]
print(numbers)
[5, 6, 7, 8, 9, 10]
'Python' 카테고리의 다른 글
중복을 없애며 list 합치기 # set에 list 합치기 (0) | 2022.12.31 |
---|---|
python: sort a list of dictionaries by a value (0) | 2022.12.18 |
python file, directory 경로 / file , directory 여부 확인 (0) | 2022.12.15 |
list index: list에서 특정 값의 순서 찾기 (0) | 2022.12.14 |
python: __name__ / if __name__ == '__main__': (0) | 2022.12.05 |