Language/자료구조

[Python] 리스트(List)

Sh-YE 2024. 5. 21. 09:29

1. 리스트 선언

  • '[ ]'를 이용해서 선언하고 , 데이터구분은 ','를 이용한다.
  • 데이터하나하나를 아이템(요소)라고 한다,
  • 리스트 안에는 숫자,문자,논리형등의 기본 데이터와 또 다른 컨테이너 자료형 데이터를 저장할 수 있다.

 

2. 인덱스

리스트의 아이템은 인덱스를 이용해서 조회가능하다.

students = ['홍길동','박찬호','이용규','박승철','김지은']
print('students: {}'.format(students))
print(students[0])
print(type(students))
print(type(students[0]))


>>>
students: ['홍길동', '박찬호', '이용규', '박승철', '김지은']
홍길동
<class 'list'>
<class 'str'>

 

3. 리스트 길이

students = ['홍길동','박찬호','이용규','박승철','김지은']
sLength = len(students)
print(sLength)

>>>
5

 

4. 아이템 추가

1) append

  : append() 함수를 이용하면, 마지막 인덱스에 아이템을 추가할 수 있다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']

print('students : {}'.format(students))
print('students : {}'.format(len(students)))

students.append('강호동')
print('students : {}'.format(students))
print('students : {}'.format(len(students)))

>>>
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']
students : 5
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']
students : 6

 

2) insert

  : insert() 함수를 잉하면, 특정위치(인덱스)에 아이템을 추가할 수 있다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']

students.insert(2,'강호동')
print('students : {}'.format(students))
print('students : {}'.format(len(students)))

 

ex) 입력받은 숫자 오름차순 정렬

numbers = [1,3,6,11,45,54,62,74,85]
inputNumber = int(input('숫자입력 : '))

insertIdx = 0

for idx,number in enumerate(numbers):
    print(idx,number)

    if  inputNumber < number:
    # if insertIdx == 0 and inputNumber < number:
        insertIdx = idx

numbers.insert(insertIdx, inputNumber)
print('numbers : {}'.format(numbers))

 

5. 아이템 삭제

 1)  pop

    : pop()  함수를 이용하면 마지막 인덱스에 해당하는 아이템을 삭제 할 수 있다.

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']

students.pop()
print('students : {}'.format(students))

>>>
students : ['홍길동', '박찬호', '이용규', '박승철']

  

  pop(n) :  n인덱스에 해당하는 아이템 삭제

students = ['홍길동', '박찬호', '이용규', '박승철', '김지은']

rValue = students.pop(1) # pop()은 지워진 값의 index를 반환
print('students : {}'.format(students))
print('삭제한 아이템 : {}'.format(rValue))

>>>
students : ['홍길동', '이용규', '박승철', '김지은']
삭제한 아이템 : 박찬호

 

 2) remove

  : remove() 함수를 이용하면, 특정 아이템을 삭제할 수 있다. 

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은', '강호동']

print('students : {}'.format(students))
students.remove('강호동')
print('students : {}'.format(students))

>>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은', '강호동']

   

remove는 동일한 이름이여도 앞에 있는 한개의 아이템만 삭제가능하다.

만약 삭제하려는 데이터가 2개이상이면 while문 사용

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은', '강호동']

print('강호동' in students)
print('students : {}'.format(students))

while '강호동' in students:
    students.remove('강호동')
print('students : {}'.format(students))

>>>
True
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
students : ['홍길동', '박찬호', '이용규', '박승철', '김지은']

 

3) del 키워드

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은', '강호동']
print('students : {}'.format(students))

del students[1]
print('students : {}'.format(students))

>>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
students : ['홍길동', '이용규', '강호동', '박승철', '김지은', '강호동']

 

슬라이싱 사용가능

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은', '강호동']
print('students : {}'.format(students))

del students[1:4]
print('students : {}'.format(students))

>>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은', '강호동']
students : ['홍길동', '박승철', '김지은', '강호동']

pop vs remove vs del

remove : 지우고자하는 인덱스가 아닌, 값을 입력

pop,del : 지우고자하는 리스트의 인덱스를 받아서 지우는 방식

                 pop()은 지워진 값의 index를 반환, 리스트의 범위를 지정하여 삭제못함

                 del 은 명령어로 반환값x, 리스트의 범위 지정가능 (*속도가 가장빠름)

6. 리스트 연결(확장)

1)  extend

  : extend() 함수를 이용하면, 리스트에 또 다른리스트를 연결 할 수 있다.

group1 = ['홍길동','박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']

print(f'group1 : {group1} ')
print(f'group2 : {group2} ')

group1.extend(group2)

print(f'group1 : {group1} ')
print(f'group2 : {group2} ')

>>>
group1 : ['홍길동', '박찬호', '이용규'] 
group2 : ['강호동', '박승철', '김지은'] 
group1 : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은'] 
group2 : ['강호동', '박승철', '김지은']

 

2) 덧셈연산자

 * extend vs 덧셈연산자 

  : extend :  a + b = a    /  덧셈연산자 : a + b = c

group1 = ['홍길동','박찬호', '이용규']
group2 = ['강호동', '박승철', '김지은']

print(f'group1 : {group1} ')
print(f'group2 : {group2} ')

# group1.extend(group2)
result = group1 + group2
print(f'result : {result} ')
print(f'group1 : {group1} ')
print(f'group2 : {group2} ')

>>>
group1 : ['홍길동', '박찬호', '이용규'] 
group2 : ['강호동', '박승철', '김지은'] 
result : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은'] 
group1 : ['홍길동', '박찬호', '이용규'] 
group2 : ['강호동', '박승철', '김지은']

 

ex) 리스트1과 리스트2 중복값제외하고 합치기

myFavoritNumbers = [1,3,5,6,7]
friendFavoritNumbers = [2,3,5,8,10]

print(f'myFavoritNumbers: {myFavoritNumbers}')
print(f'friendFavoritNumbers: {friendFavoritNumbers}')

addList = myFavoritNumbers + friendFavoritNumbers
print(f'addList: {addList}')

result = []
for number in addList:
    if number not in result:
        result.append(number)
        
print(f'result: {result}')       


>>>
myFavoritNumbers: [1, 3, 5, 6, 7]
friendFavoritNumbers: [2, 3, 5, 8, 10]
addList: [1, 3, 5, 6, 7, 2, 3, 5, 8, 10]
result: [1, 3, 5, 6, 7, 2, 8, 10]

 

7. 아이템 정렬

1) sort

sort(reverse=False) : 오름차순 (기본값 설정되어 생략해도됨)

sort(reverse=True) : 내림차순

 

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은']
print(f'students : {students}')
# 오름차순
students.sort(reverse=False)
print(f'students : {students}')
# 내림차순
students.sort(reverse=True)
print(f'students : {students}')

>>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students : ['강호동', '김지은', '박승철', '박찬호', '이용규', '홍길동']
students : ['홍길동', '이용규', '박찬호', '박승철', '김지은', '강호동']

 

2) reverse 

: reverse() 함수를 이용하면 아이템순서를 뒤집을 수 있다. 

students = ['홍길동', '박찬호', '이용규','강호동', '박승철', '김지은']
print(f'students : {students}')
students.reverse()
print(f'students : {students}')

>>>
students : ['홍길동', '박찬호', '이용규', '강호동', '박승철', '김지은']
students : ['김지은', '박승철', '강호동', '이용규', '박찬호', '홍길동']