[Python][자료구조] 리스트 : 연결, 정렬, 슬라이싱

·2023년 3월 19일
0
post-thumbnail

✒️ 리스트 연결(확장)

extend() 함수와 덧셈 연산자를 이용하면 리스트에 또 다른 리스트를 연결할 수 있다.

📌extend() 함수

기존리스트에 아이템을 추가


fruit = ['사과', '딸기', '바나나', '오렌지']
bread = ['소금빵', '롤케이크','크루아상', '베이글']
print(f'list1 : {fruit}')
print(f'list2 : {bread}')
print(f'fruit.extend(bread) : {fruit.extend(bread)}')
print(f'list1 : {fruit}')
print(f'list2 : {bread}')
💡result

list1 : ['사과', '딸기', '바나나', '오렌지']
list2 : ['소금빵', '롤케이크', '크루아상', '베이글']
fruit.extend(bread) : None
list1 : ['사과', '딸기', '바나나', '오렌지', '소금빵', '롤케이크', '크루아상', '베이글']
list2 : ['소금빵', '롤케이크', '크루아상', '베이글']

📌덧셈 연산

새로운 리스트를 만들어 아이템을 추가


fruit = ['사과', '딸기', '바나나', '오렌지']
bread = ['소금빵', '롤케이크', '크루아상', '베이글']
print(f'list1 : {fruit}')
print(f'list2 : {bread}')
# print(f'fruit.extend(bread) : {fruit.extend(bread)}')
print(f'list1+list2 : {fruit + bread}')
print(f'list1 : {fruit}')
print(f'list2 : {bread}')
💡result

list1 : ['사과', '딸기', '바나나', '오렌지']
list2 : ['소금빵', '롤케이크', '크루아상', '베이글']
list1+list2 : ['사과', '딸기', '바나나', '오렌지', '소금빵', '롤케이크', '크루아상', '베이글']
list1 : ['사과', '딸기', '바나나', '오렌지']
list2 : ['소금빵', '롤케이크', '크루아상', '베이글']


✍️실습

나와 친구가 좋아하는 번호를 합치되 번호가 중복되지 않게 하는 프로그램


def connetList(list1, list2):
    connects = list1 + list2
    result = connects.copy()
    for num in result:
        if num in list1 and num in list:
            result.remove(num)

    print(f'list1 + list2 = {conne cts}')
    print(f'not duplication = {result}')


list1 = [1, 3, 5, 6, 7]
list2 = [2, 5, 3, 10, 8]
print(f'My List : {list1}')
print(f'Friend List : {list2}')
connetList(list1, list2)
💡result

My List : [1, 3, 5, 6, 7]
Friend List : [2, 5, 3, 10, 8]
list1 + list2 = [1, 3, 5, 6, 7, 2, 5, 3, 10, 8]
not duplication = [1, 6, 7, 2, 5, 3, 10, 8]

✒️ 리스트 정렬

📌 sort()

sort() 함수를 이용하면 아이템을 정렬할 수 있다.

sort() : 오름차순
sort(reverse=True) : 내림차순

bread = ['소금빵', '롤케이크', '크루아상', '베이글', '커피번']
print(f'bread : {bread}')
bread.sort()
print(f'bread.sort() : {bread}')
bread.sort(reverse=True)
print(f'bread.sort(reverse=True) : {bread}')

nembers = [1, 4, 12, 7, 33, 87, 65, 100]
print(f'nembers : {nembers}')
nembers.sort()
print(f'nembers.sort() : {nembers}')
nembers.sort(reverse=True)
print(f'nembers.sort(reverse=True) : {nembers}')
💡result

bread : ['소금빵', '롤케이크', '크루아상', '베이글', '커피번']
bread.sort() : ['롤케이크', '베이글', '소금빵', '커피번', '크루아상']
bread.sort(reverse=True) : ['크루아상', '커피번', '소금빵', '베이글', '롤케이크']
nembers : [1, 4, 12, 7, 33, 87, 65, 100]
nembers.sort() : [1, 4, 7, 12, 33, 65, 87, 100]
nembers.sort(reverse=True) : [100, 87, 65, 33, 12, 7, 4, 1]

✒️ 리스트 아이템 순서 뒤집기

📌 reverse() 함수

reverse 함수를 이용하념 아이템 순서를 뒤집을 수 있다.


fruit = ['사과', '딸기', '바나나', '오렌지']
print(fruit)
fruit.reverse()
print('-' * 12 + 'reverse()' + '-' * 12)
print(fruit)
💡result

['사과', '딸기', '바나나', '오렌지']
------------reverse()------------
['오렌지', '바나나', '딸기', '사과']

✍️실습

전쟁에서 사용되는 암호 풀이


secret = 27156231
secretList = []

for i in str(secret):
    secretList.append(int(i))

# 암호 뒤집기
secretList.reverse()
solvedList = secretList.copy()
# 암호 해독
val = secretList[0] * secretList[1]
solvedList.insert(2, val)
val = secretList[2] * secretList[3]
solvedList.insert(5, val)
val = secretList[4] * secretList[5]
solvedList.insert(8, val)
val = secretList[6] * secretList[7]
solvedList.insert(11, val)

print(f'암호문 : {secretList}')
print(f'해독문 : {solvedList}')
💡result

암호문 : [1, 3, 2, 6, 5, 1, 7, 2]
해독문 : [1, 3, 3, 2, 6, 12, 5, 1, 5, 7, 2, 14]

✒️ 리스트 슬라이싱

📌 슬라이싱을 이용한 아이템 조회

[n:m]을 이용하면 리스트에서 원하는 아이템만 뽑아낼 수 있다.


fruit = ['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아']
print(f'{fruit}')
print(f'{fruit[2:4]}')
print(f'{fruit[:4]}')
print(f'{fruit[2:]}')
print(f'{fruit[2:-2]}')
print(f'{fruit[-4:-1]}')

nembers = [1, 4, 12, 7, 33, 87, 65, 100]
print(f'{nembers}')
print(f'{nembers[2:4]}')
print(f'{nembers[:4]}')
print(f'{nembers[2:]}')
print(f'{nembers[2:-2]}')
print(f'{nembers[-4:-1]}')
💡result

['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아']
['바나나', '오렌지']
['사과', '딸기', '바나나', '오렌지']
['바나나', '오렌지', '귤', '메론', '복숭아']
['바나나', '오렌지', '귤']
['오렌지', '귤', '메론']
[1, 4, 12, 7, 33, 87, 65, 100]
[12, 7]
[1, 4, 12, 7]
[12, 7, 33, 87, 65, 100]
[12, 7, 33, 87]
[33, 87, 65]

슬라이싱할 때 단계를 설정할 수 있다.

nembers = [1, 4, 12, 7, 33, 87, 65, 100]
print(f'{nembers}')
print(f'{nembers[2::2]}')
print(f'{nembers[:-2:3]}')
print(f'{nembers[-2::3]}')
print(f'{nembers[-2::-3]}')
print(f'{nembers[1:7:2]}')
print(f'{nembers[1:100:2]}') #오류 안남 
💡result

[1, 4, 12, 7, 33, 87, 65, 100]
[12, 33, 65]
[1, 7]
[65]
[65, 7, 1]
[4, 7, 87]
[4, 7, 87, 100]

📌 슬라이싱을 이용한 아이템 변경

fruit = ['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아', '석류']
print(f'fruit : {fruit} , 길이 : {len(fruit)}')
fruit[0:2] = [0, 1]
print(f'fruit : {fruit} , 길이 : {len(fruit)}')
fruit[2:5] = [2, 3, 4, 5] # 슬라이싱 길이보다 많은 데이터 입력 새로운 데이터 추가
print(f'fruit : {fruit} , 길이 : {len(fruit)}')
fruit[6:9] = [6, 7]  # 슬라이싱 길이보다  적은 데이터 입력 시 기존 데이터 사라짐
print(f'fruit : {fruit} , 길이 : {len(fruit)}')
💡result

fruit : ['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아', '석류'] , 길이 : 8
fruit : [0, 1, '바나나', '오렌지', '귤', '메론', '복숭아', '석류'] , 길이 : 8
fruit : [0, 1, 2, 3, 4, 5, '메론', '복숭아', '석류'] , 길이 : 9
fruit : [0, 1, 2, 3, 4, 5, 6, 7] , 길이 : 8

📌 slice() 함수 이용

fruit = ['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아']
print(f'{fruit}')
print(f'{fruit[slice(0,2)]}')
print(f'{fruit[slice(3,7)]}')
print(f'{fruit[slice(-3,)]}')
print(f'{fruit[slice(3,)]}')
print(f'{fruit[slice(-1,)]}') #[ : ] 와 다르게 - 연산은 작동하지 않음 
print(f'{fruit[slice(-1)]}')
💡result

['사과', '딸기', '바나나', '오렌지', '귤', '메론', '복숭아']
['사과', '딸기']
['오렌지', '귤', '메론', '복숭아']
['사과', '딸기', '바나나', '오렌지']
['사과', '딸기', '바나나']
['사과', '딸기', '바나나', '오렌지', '귤', '메론']
['사과', '딸기', '바나나', '오렌지', '귤', '메론']

✒️ 리스트의 나머지 기능들

1. 리스트를 곱셉 연산하면 아이템이 반복된다.

rawList = ['구름', '햇빛', '비', '눈', '태풍']
mulList = rawList * 2
print(rawList)
print(mulList)
💡result

['구름', '햇빛', '비', '눈', '태풍']
['구름', '햇빛', '비', '눈', '태풍', '구름', '햇빛', '비', '눈', '태풍']

2. index 함수를 이용하면 item의 index를 알아낼 수 있다.

데이터 중복시 앞에 있는 데이터의 위치 반환

rawList = ['구름', '햇빛', '비', '눈', '태풍', '비']
mulList = rawList * 2
print(rawList)
print(f'비의 위치 : {rawList.index("비")}')
💡result

['구름', '햇빛', '비', '눈', '태풍', '비']
비의 위치 : 2

인덱스를 찾을 범위 설정 가능

print(f'비의 위치 : {rawList.index("비", 3, )}')
💡result

비의 위치 : 5

3. count() 함수를 이용하면 특정 아이템의 개수를 알아낼 수 있다.

print(f' list : {rawList} ')
print(f' 햇빛의 개수 : {rawList.count("햇빛")} ')
💡result

 list : ['구름', '햇빛', '비', '눈', '태풍', '햇빛', '햇빛'] 
 햇빛의 개수 : 3 

4. del 키워드를 이용하면 특정 아이템을 삭제할 수 있다.

print(f' list : {rawList} ')
del rawList[0]
print(f' list : {rawList} ')
del rawList[:3]
print(f' list : {rawList} ')
💡result

 list : ['구름', '햇빛', '비', '눈', '태풍', '햇빛', '햇빛'] 
 list : ['햇빛', '비', '눈', '태풍', '햇빛', '햇빛'] 
 list : ['태풍', '햇빛', '햇빛'] 
profile
개발하고싶은사람

0개의 댓글