article thumbnail image
Published 2022. 3. 19. 09:22

리스트

리스트명 = [요소1, 요소2, 요소3, .. ]

  • 여러 개의 값을 집합적으로 저장
  • 다른 언어의 배열에 해당하며 실제로 배열과 비슷한 방식으로 사용
  • [] 괄호 안에 요소를 ','로 구분하여 나열함으로써 초기화
  • 파이썬에서는 리스트 하나에 다른 타입의 값을 섞어서 저장하는 것도 가능
    • 일반적이지 않고 같은 타입이 아니면 실질적인 의미나 실용성이 떨어짐
  • 실행 중에 요소 추가 가능
score = [88, 95, 70, 100, 99]
sum = 0
for s in score:
  sum += s
print("총점 : ", sum)
print("평균 : ", sum / len(score))
더보기

총점 : 452

평균 : 90.4

 

리스트의 요소

[begin:end:step]

  • 리스트는 여러 가지 면에서 문자열과 유사
    • 사실 문자열이 문자들을 모아 놓은 일종의 리스트
  • 리스트의 개별 요소를 읽을 때는 [] 괄호 안에 읽고자 하는 요소의 순서값 삽입
  • 첨자는 0부터 시작. 음수는 뒤쪽에서부터의 순서를 지정하며 제일 마지막 요소가 -1번
  • 요소의 순서값을 매기는 방법이 문자열과 같고 첨자가 범위를 벗어나면 에러 처리
  • 문자열은 변경 불가능하지만 리스트는 변경 가능 → 가장 큰 차이
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5]) # 2 ~ 5까지
print(nums[:4]) # 처음부터 4까지
print(nums[6:]) # 6에서 끝까지
print(nums[1:7:2]) # 1 ~ 7까지 하나씩 건너뛰며

nums[3] = 30 # 값 변경
print(nums)

nums[6:9] = [60, 70, 75, 80, 85, 88] # 여러 요소를 일괄 변경도 가능
print(nums)
더보기

[2, 3, 4]

[0, 1, 2, 3]

[6, 7, 8, 9]

[1, 3, 5]

[0, 1, 2, 30, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 30, 4, 5, 60, 70, 75, 80, 85, 88, 9]

nums[2:5] = [] # 부분 리스트를 삭제
print(nums)

del nums[4] # 리스트 내의 요소 하나만 삭제
print(nums)

list1 = [1, 2, 3, 4, 5]
list2 = [10, 11]
listadd = list1 + list2 # 리스트 +. 두 리스트를 연결
print(listadd)
listmulti = list2 * 3 # 리스트 *. 요소를 정수 번 반복
print(listmulti)
더보기

[0, 1, 5, 60, 70, 75, 80, 85, 88, 9]
[0, 1, 5, 60, 75, 80, 85, 88, 9]
[1, 2, 3, 4, 5, 10, 11]
[10, 11, 10, 11, 10, 11]

 

이중 리스트

lol = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] # 리스트 자체도 요소가 될 수 있음
print(lol[0])
print(lol[2][1])

for sub in lol:
  for item in sub:
    print(item, end = ' ')
  print()
더보기

[1, 2, 3]

7

1 2 3

4 5

6 7 8 9

 

List Comprehension

[수식 for 변수 in 리스트 if 조건]

  • 리스트 안의 요소가 일정한 규칙을 갖는 수열이라면 위와 같이 정의
  • [] 괄호 안에 요소를 생성하는 for문과 if문이 포함되어 있음
  • 내부의 리스트를 순회하며 각 요소에 대해 수식을 적용하여 최종 요소 생성
  • if 조건은 그 중 일부 요소만 추려냄. 필요없으면 생략 가능
nums = [n * 2 for n in range(1, 11)] # 1 ~ 10을 순회하며 그 2배 값을 취함
for i in nums:
  print(i, end = ', ')

# 아래 코드와 같음
'''
nums = []
for n in range(1, 11):
nums.append(n * 2)
'''
더보기

2, 4, 6, 8, 10, 12, 14, 16, 18, 20,

 

삽입

nums = [1, 2, 3, 4]
nums.append(5) # 요소를 리스트의 끝에 덧붙여 추가
nums.insert(2, 99) # 삽입할 위치와 요소값을 전달받아 리스트의 중간에 삽입
print(nums)

nums = [1, 2, 3, 4]
nums[2:2] = [90, 91, 92] # [2:2] 범위에 3개 요소 대입 == 세 개의 요소를 삽입
print(nums)

nums = [1, 2, 3, 4]
nums[2] = [90, 91, 92] # [2] 위치의 요소에 리스트를 대입
print(nums)
더보기

[1, 2, 99, 3, 4, 5]

[1, 2, 90, 91, 92, 3, 4]

[1, 2, [90, 91, 92], 4]

list1 = [1, 2, 3, 4, 5]
list2 = [10, 11]

print(list1 + list2) # 양쪽의 리스트는 건드리지 않고 새 리스트 반환 (+)
print(list1) # list1은 그대로

list1.extend(list2) # list1에 list2를 직접 덧붙임 (+=)
print(list1)
더보기

[1, 2, 3, 4, 5, 10, 11]

[1, 2, 3, 4, 5]

[1, 2, 3, 4, 5, 10, 11]

 

삭제

score = [88, 95, 70, 100, 99, 80, 78, 50]
score.remove(100) # 인수로 전달받은 요소값을 찾아 삭제
print(score)
del(score[2]) # 순서값을 지정하여 삭제. ‘del score[2]’로도 호출 가능
print(score)
score[1:4] = [] # 일정 범위를 지울 때는 범위에 대해 빈 리스트 대입. == del score[1:4]
print(score)
score.clear() # 리스트를 비우는 경우. == score[:] = []
print(score)
score = [88, 95, 70, 100, 99]
print(score.pop()) # 요소를 지우면서 꺼내어 리턴. 마지막 요소를 빼냄
print(score.pop(1)) # 인수로 지울 대상 지정도 가능
print(score)
더보기

[88, 95, 70, 99, 80, 78, 50]

[88, 95, 99, 80, 78, 50]

[88, 78, 50]

[]

99

95

[88, 70, 100]

 

검색

score = [88, 95, 70, 100, 99, 80, 78, 50]
perfect = score.index(100) # 특정 요소의 위치 찾기
print("만점자는 " + str(perfect) + "번입니다.")
pernum = score.count(100) # 특정 요소값의 개수 조사
print("만점자 수는" + str(pernum) + "명입니다.")
print("학생 수는 %d명입니다." % len(score)) # 리스트의 길이
print("최고 점수는 %d점입니다." % max(score)) # 리스트의 요소 중 최대값
print("최저 점수는 %d점입니다." % min(score)) # 리스트의 요소 중 최소값
ans = input("결제 하시겠습니까? ")
if ans in ['yes', 'y', 'ok', '예', '넵', '당근']: # in 연산자로 요소가 있는지 검사
  print("구입해 주셔서 감사합니다.")
else:
  print("안녕히 가세요.")
더보기

만점자는 3번입니다.

만점자 수는1명입니다.

학생 수는 8명입니다.

최고 점수는 100점입니다.

최저 점수는 50점입니다.

결제 하시겠습니까? 넵

구입해 주셔서 감사합니다.

 

정렬

score = [88, 95, 70, 100, 99]
score.sort() # 오름차순으로 요소를 정렬
print(score)
score.reverse() # 내림차순으로 정렬 == score.sort(reverse=True)
print(score)

country = ["Korea", "japan", "CHINA", "america"]
country.sort() # 문자열 정렬 시 대문자가 더 작은것으로 평가됨
print(country)
country.sort(key = str.lower) # 대소문자 무시하려면 key 인수에 str.lower
print(country)
더보기

[70, 88, 95, 99, 100]
[100, 99, 95, 88, 70]
['CHINA', 'Korea', 'america', 'japan']
['america', 'CHINA', 'japan', 'Korea']

score = [88, 95, 70, 100, 99]
score2 = sorted(score) # 정렬된 새 리스트를 반환. 결과를 별도의 변수에 저장해야 함
print(score) # 원본은 그대로
print(score2)
더보기

[88, 95, 70, 100, 99]

[70, 88, 95, 99, 100]

 

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

[Python] sort, join  (0) 2022.03.26
[Python] module  (0) 2022.03.23
[Python] 문자열  (0) 2022.03.21
[Python] 2차원 리스트, zip  (0) 2022.03.20
[Python] map, input, strip, split  (0) 2022.03.18
복사했습니다!