본문 바로가기

IT

9. 파이썬 - 리스트

리스트 들어가기전 잠시 ㅎ

문자열 포맷팅 폭 지정

'''
문자열 포맷팅 폭 지정

포맷팅을 사용할 때 포맷문자열이 차지할 공간의 길이를 지정할 수 있다.
폭 지정을 하면 문자열을 정돈된 형태로 표현할 수 있습니다.
포맷팅 서식문자 자리에 양의 정수값을 주면 해다 숫자만큼 자리를 차지하며 우측정렬한다.

'''

a = 1234
print("~~~%d~~~" % a)
print("~~~%5d~~~" % a)
print("~~~%8d~~~" % a)
#지정한 포보다 데이터의 길이가 더 길경우 폭 지정을 적용하지 않는다.
print("~~~%2d~~~" % a) 

print("-" * 40)
price = [30, 19600, 8700, 500]
for p in price:
    print("가격: %-8d원" % p)
    
f =3.12345678

print("f의 값은 %5.2f입니다." % f) # 총 5자리 중 소수점 2개자리까지 출력


-------------------------결과---------------------------------

~~~1234~~~
~~~ 1234~~~
~~~    1234~~~
~~~1234~~~
----------------------------------------
가격: 30      원
가격: 19600   원
가격: 8700    원
가격: 500     원

 

리스트 기본

'''
리스트
리스트는 여러개의 값을 집합적으로 저장하기 위해 사용하는 파이썬의 자료형이다.
다른 언어의 배열과 비슷한 개념이며 실제로 배열과 유사한 방식으로 데이터를 관리한다.
[]안에 요소를 콤마로 구분하여 나열한다.
저장개수에 제한이 없어 많은 데이터를 저장할 수 있다.
리스트 내부에 저장할 수 있는 데이터 타입에는 제한이 없다.
그리고 여러 데이터타입의 데이터를 섞어서 저장할 수도 있지만 일반적이지는 않다!!!!.

리스트를 사용하면 반복문을 쉽게 사용할 수 있어 개별 변수로 데이터를 처리했을 때보다
간단히 코드를 작성할 수 있으며, 가변적인 규모에도 쉽게 대응할 수 있다.
'''

points = [88, 96, 70, 100, 99]
sum = 0
for p in points:
    sum += p
avg = sum / len(points)
print("총점: %d점, 평균: %.2f점" % (sum, avg))


-------------결과------------------
총점: 453점, 평균: 90.60점

 

리스트 관리

'''
리스트의 요소(element) 다루기
리스트를 다룰때는 문자열과 비슷한 방식을 사용한다.
문자열도 문자들을 모아놓은 일종의 리스트이다.
리스트는 인덱스를 통해 요소들을 관리한다.

'''

names = ["기러기", "스위스", "우영우", "금요일"]

print(names[2])  #우영우
print(names[-1])  #우영우

print(type(names))  #list
print(type(names[1]))  # str
# 안의 요소 타입과 리스트 타입이 다르다는것이 중요하다.!!!!!!!!!

print(names[1][0]) # 스위스가 문자열이기 때문에 다시 0번째를 찾음 즉, 스 


print("-" * 40)

#리스트 슬라이싱 -> 리스트데이터[begin:end:step]
nums = [0,1,2,3,4,5,6,7,8,9]   

print(nums[2:5:1])  
print(nums[:4])
print(nums[6:])
print(nums[1:7:2])

#리스트는 인덱싱을 통해 변수처럼 내부 요소를 변경할 수 있습니다.
print("-" * 40)
print(names)

names[2] = "이순신"
print(names)  

names[3] = nums[7]
print(names)    


'''
문자열은 상수형태로 저장되는 고정형 리스트이다.
따라서 인덱싱을 통해 값을 사용하는것은 가능하지만 영역에 접근하여 내부 값을 변경할 수는 없다.
'''
print("-" * 40)

s1 = "python"
#s1[2] = "x" 안됨. 문자열은 고정형 리스트 이므로
print(s1[2])
print(s2[2:5])

#s1[2] = "x"
print(s1)

# 리스트에 +, *연산은 문자열과 같은 결과를 반환한다.

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

print(list1 + list2)  # [1, 2, 3, 4, 5, 10, 11]
print(list * 3) #[10, 11, 10, 11, 10, 11]

'''
비어있는 리스트 만들기  2가지 방법이있다.
'''

print("-----------------------------")
list1 = []
print(list1)

list2 = list()
print(list2)

 

'''
리스트 관리 함수, 메서드

리스트는 문자열과는 달리 내부 요소데이터의 자유로운 편집이 가능하다.

리스트에 데이터를 추가하는 메서드
1. append() : 요소를 리스트의 맨 마지막에 추가
2.insert() : 요소를 리스트의 특정 위치에 삽입
3.extend() : 리스트에 또 다른 리스트를 병합

'''

nums = [1, 3, 5, 7]
print(nums)

#nums[4] = 9 
#list assignment index out of range 라는 에러발생, 공간이 없는데 집어넣으려고하니..

print("-" * 40)
nums.append(9)
print(nums)

nums.append("안녕")
print(nums)

'''
ex) insert(index(값을 넣을 위치 인덱스번호), value(넣은 값))
'''
nums.insert(4, "하이")
print(nums)

'''
# nums의 2번 인덱스에 새로운 리스트 [9, 10, 11]을 저장!
nums[2] = [9, 10, 11]
print(nums)
'''

# nums의 2번 인덱스 이상 3번 인덱스 미만 영역에 들어있는 값을 삭제하고 요소 9, 10, 11을 삽입한다.
print("-" * 40)
nums[2:3] = [9, 10, 11]
print(nums)

nums[1:5] =[15] # 1이상부터 5번 인덱스미만까지 삭제한후 15를 삽입.

# 2번 인덱스 영역에 요소 99, 100 을 삽입
nums[2:2] = [99, 100]
print(nums)

'''
리스트의 + 연산은 원본 리스트는 변화하지 않고 연산이 완료된 새로운 리스트를 생성한다.
extend는 기존의 리스트에 새로운 리스트를 병합시켜 원본의 구조를 변경한다.
'''
list1 = [5, 4, 3, 2, 1]
list2 = [9, 8, 7, 6]

list2.extend(list1)
print(list2)

-----------------------------결과------------------------------

[1, 3, 5, 7]
----------------------------------------
[1, 3, 5, 7, 9]
[1, 3, 5, 7, 9, '안녕']
[1, 3, 5, 7, '하이', 9, '안녕']
----------------------------------------
[1, 3, 9, 10, 11, 7, '하이', 9, '안녕']
[1, 15, 99, 100, 7, '하이', 9, '안녕']
[9, 8, 7, 6, 5, 4, 3, 2, 1]