| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 정보처리기사
- TTS
- 자연어처리
- Transformer
- 데이터 시각화
- SQL
- 에이전트
- 알고리즘
- CNN
- 랭그래프
- UMAP
- 객체지향
- dementional reduction
- Python
- LangGraph
- 트랜스포머
- RDBMS
- python기초
- python 기초
- ASR
- 데이터엔지니어
- 힙정렬
- CLIP
- 머신러닝
- 소프트웨어 개발
- 기초
- RNN
- 생성형 인공지능
- 캐글
- 딥러닝
- Today
- Total
수달이네 기술 블로그
8. 리스트2(리스트 관련 함수들, 리스트 함축...) 본문
🔍리스트 함수들
del 리스트[:]: 리스트 요소 삭제
heros = ["superman", "spiderman","batman"]
del heros[:]
print(heros)
del키워드를 이용해 [인덱스]의 요소를 삭제할 수 있다.
마찬가지로 ':(콜론)'을 이용하여 start:end요소를 삭제할 수 있으며, 입력을 하지 않을 경우 전체 삭제가 가능하다.
리스트.clear(): 모든 요소 제거
heros = ["superman", "spiderman","batman"]
heros.clear()
print(heros)
del[:]과 같은 기능을 한다.
리스트.count(): 특정 요소의 개수 알아내기
heros = ["superman", "spiderman","batman"]
cnt = heros.count("superman")
print(cnt)
#1
리스트 내의 (요소)의 개수를 알아낼 수 있음.
리스트.extend(): 리스트 두개를 이어 붙일 수 있음(+ 연산과 같은 연산)
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
heros.extend(villans)
print(heros)
#['superman', 'spiderman', 'batman', 'joker', 'Dr.Octopus']
리스트 두개를이어 붙이는 연산.
🔍얕은 복사, 깊은 복사
일반적으로 변수 = 변수를 이용하면 해당 변수가 복사된다.
그러나 해당 변수의 내용이 복사되는 것이 아닌 해당 변수의 주소만 복사되는 것인데,
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
hero2 = heros
hero2 += villans
print(heros)
#['superman', 'spiderman', 'batman', 'joker', 'Dr.Octopus']
위의 코드를 살펴보면 분명 hero2 변수에 villans변수를 연결해 주었지만, heros 변수에도 영향이 간 것을 확인할 수 있다.
그 이유는 위에서 말했듯이 변수의 주소만 복사되었기 때문이다.
이 이유는 '얕은 복사'를 했기 때문이다.
score = 100
myScore = score
myScore -= 30
print(myScore, score)
#70 100
위의 코드는 똑같은 방식으로 복사를 했지만, 이전에 말한 mutable object가 아니므로 myscore의 주소가 변경된다.
그렇다면 얕은 복사가 아닌 깊은 복사를 하려면 어떻게 해야 할까?
1. list() 메서드
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
hero2 =list(heros) #heros[:]이런식으로 하는 것도 가능하다
hero2 += villans
print(heros)
#['superman', 'spiderman', 'batman']
list() 메서드를 이용해 새로운 객체를 생성해 주어 주소가 아닌 값으로 만들어 주는 방법
이것과 같은 방법으로 heros [:]을 사용하여 복사해 주는 방법도 있다.
2. copy.deepcopy() 메서드
from copy import *
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
hero2 =deepcopy(heros) #copy(heros)와 같음
hero2 += villans
print(heros)
#['superman', 'spiderman', 'batman']
이건 라이브러리의 copy를 이용하여 복사해 주는 방법이다.
위 같은 방식을 이용하면 얕은 복사가 아닌 깊은 복사가 가능하여 원본 리스트의 값을 유지한 채로 복사한 리스트의 값을 변경할 수 있다.
💡is 키워드
파이썬에서 보통 ==을 이용하여 변수들의 값이 같은지 비교한다.
이와 비슷하게 변수들의 주소값을 비교하는 키워드도 존재하는데 그게 'is'키워드이다.
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
hero2 = heros
print(heros is hero2)
#True
heros = ["superman", "spiderman","batman"]
villans = ["joker", "Dr.Octopus"]
hero2 = list(heros)
print(heros is hero2)
#False
위를 보면 위처럼 얕은 복사를 했을 때는 True가 나오며, 깊은 복사를 했을 때는 False가 출력됨을 알 수 있다.
이를 통해 해당 변수들이 같은 주소를 가리키는지 확인할 수 있다.
🔍리스트 함축(list comprehensions)
s = []
for i in range(10):
num = i**2
if num % 2 == 0:
s.append(num)
print(s)
#[0, 4, 16, 36, 64]
위와 같이 for반복문과 if문으로 리스트를 생성할 때 이걸 함축하여 하나의 리스트 식으로 만들 수 있는데,
s = [x**2 for x in range(10) if (x**2) % 2 == 0]#[출력식 for i in oldlist if 조건식(선택)]
print(s)
#[0, 4, 16, 36, 64]
위와 같은 방식을 리스트 함축 방식이라 한다.
해당 방식은 수학적으로 집합을 정의하는 것과 유사하다.
한마디로 코드를 함축하는 것과 같다. 람다식과 같은 느낌.
from random import *
randList = [randint(1,100) for i in range(10)]
print(randList)
#[77, 73, 30, 14, 94, 24, 96, 61, 54, 91]
위같은 함수를 이용하는 방법 또한 가능하며
list1 = ["a","b","c","d","e","f"]
list2 = ["team " + str.upper(i) for i in list1]
print(list2)
#['team A', 'team B', 'team C', 'team D', 'team E', 'team F']
문자열도 가능하다.
heros = ["superman", "spiderman","batman", "ironman"]
villans = ["joker", "Dr.Octopus", "venom", "thanos"]
heroXVillan = [(x,y) for x in villans for y in heros]
print(heroXVillan)
#[('joker', 'superman'), ('joker', 'spiderman'), ('joker', 'batman'),
#('joker', 'ironman'), ('Dr.Octopus', 'superman'), ('Dr.Octopus', 'spiderman'),
#('Dr.Octopus', 'batman'), ('Dr.Octopus', 'ironman'), ('venom', 'superman'),
#('venom', 'spiderman'), ('venom', 'batman'), ('venom', 'ironman'), ('thanos', 'superman'),
#('thanos', 'spiderman'), ('thanos', 'batman'), ('thanos', 'ironman')]
위와 같은 방식으로 문자열 두 개를 카티션 곱으로 연결하기도 한다.
🔍파일 입출력
파이썬에서 파일을 입출력하는 것을 간단하게 소개하고자 한다.
from random import randint
data = []
fp = open("hi.txt", mode = "w", encoding="utf-8")
fp.write(str(list(randint(1, 100) for i in range (100))))
fp.close()
fp = open("hi.txt", mode = "r", encoding="utf-8")
print(fp.read())
fp.close()
open() 메서드를 이용하여 해당 파일의 경로를 입력하면 파일을 열 수 있으며,
mode에 w를 이용해 쓰기 r을 이용해 읽기를 설정할 수 있다.
write() 메서드로 해당 파일에 쓸 수도 있으며,
read() 메서드를 통해 읽어올 수 있다.
import csv
fp = open("data.csv",mode="r")
reader = csv.reader(fp)
for row in reader:
print(row)
위처럼 파일을 읽고 쓰거나 csv파일을 읽어올 수도 있다.
from random import randint
data = []
fp = open("hi.txt", mode = "w", encoding="utf-8")
fp.write(str(list(randint(1, 100) for i in range (100))))
fp.close()
fp = open("hi.txt", mode = "r", encoding="utf-8")
print(fp.read())
fp.close()
import csv
fp = open("data.csv",mode="r")
reader = csv.reader(fp)
for row in reader:
print(row)
위처럼 파일을 읽고 쓰거나 csv파일을 읽어올수도 있다.
'언어 > Python' 카테고리의 다른 글
| 10. 딕셔너리와 문자열 (4) | 2025.08.28 |
|---|---|
| 9. 자료구조 (9) | 2025.08.27 |
| 7. 리스트(list 자료형의 기능, 함수 등..) (5) | 2025.08.25 |
| 6. 함수2(Call-by-value,reference, 람다식, 튜플, 모듈 등...) (6) | 2025.08.25 |
| 5. 함수 (0) | 2025.08.23 |