리스트

cuckoo·2022년 10월 3일
0

Python

목록 보기
2/3

리스트

  • 인덱싱 번호는 0번부터!
  • 마이너스 인덱스는 뒷순서대로
    #리스트 (list)
    numbers = [2, 3, 5, 7, 11, 13] 
    names = ["윤수", "혜린", "태호", "영훈"]
    
    # 인덱싱 (indexing)
    print(names[1])
    
    num_1 = numbers[1]
    num_3 = numbers[3]
    print(num_1 + num_3)
    
    print(numbers[-1])
    print(numbers[-2])
    
    혜린
    10
    13
    11
  • 리스트 슬라이싱
    • 주의점 : [0 : 4] 0,1,2,3을 불러오는 것

      #리스트 (list)
      numbers = [2, 3, 5, 7, 11, 13] 
      names = ["윤수", "혜린", "태호", "영훈"]
      
      #리스트 슬라이싱 (list slicing)
      print(numbers[0:4]) # 4가지의 인덱스를 가져온다
      print(numbers[2:])  # 0,1,2 3개의 인덱스 뒤를 가져온다.
      print(numbers[:3])  # 인덱스3까지가 아니라 인덱스 2까지 가져온다. 
      
      #리스트 슬라이싱을 리스트하기 
      new_list = numbers[:3] # [2, 3, 5]
      print(new_list[2])
      
      [2, 3, 5, 7]
      [5, 7, 11, 13]
      [2, 3, 5]
      5
      #리스트 (list)
      numbers = [2, 3, 5, 7, 11, 13] 
      names = ["윤수", "혜린", "태호", "영훈"]
      
      #리스트에 정수 저장
      numbers[0] = 7  # 0번 인덱스에 7을 저장 
      
      numbers[0] = numbers[0] + numbers[1]
      print(numbers)
      [7, 3, 5, 7, 11, 13] 
      [5, 3, 5, 7, 11, 13]

리스트 함수

  • len(list) 함수
    • length로 리스트의 길이를 알려줌

      numbers = [100, 4]
      
      print(len(numbers)) # 리스트의 길이를 나타낸 함수
      2
  • list.append() 함수 : 추가 연산
    • 리스트에 값을 오른쪽 끝에 추가해줌

      numbers = []
      numbers.append(100) # 리스트에 값을 오른쪽 끝에 추가
      numbers.append(4)
      print(numbers)
      
      #여러개 오른쪽 추가
      numbers.extend([6, 7, 8]) 
      [100, 4]
      [100, 4, 6, 7, 8]
  • del list[] 함수
    • delete로 리스트에 값을 삭제해줌

      numbers = [2, 3, 5, 7, 11, 13, 17, 19]
      del numbers[3]
      print(numbers)
      [2, 3, 5, 11, 13, 17, 19]
  • list.insert(위치, 값) 함수 : 삽입 연산
    • insert(인덱스 번호, 값)으로 인덱스 번호에 값을 추가해줌

    • 4번 인덱스 ⇒ 5번째

      numbers = [2, 3, 5, 7, 11, 13, 17, 19]
      numbers.insert(4, 37) #원하는 위치에 값을 추가
      print(numbers)
      [2, 3, 5, 7, 37, 11, 13, 17, 19]

리스트 정렬

  • sorted(list) 함수
    • 리스트 값을 가져와서 따로 낮은 숫자로 정렬

    • 큰 수로 정렬 sorted(리스트, reverse = Ture)

      numbers = [19, 13, 2, 5, 3, 11, 7, 17]
      
      new_list_1 = sorted(numbers)  # 작은 수 정렬
      new_list_2 = sorted(numbers, reverse = True)  # 반대로 큰 수 정렬
      print(new_list_1)
      print(new_list_2)
      [2, 3, 5, 7, 11, 13, 17, 19]
      [19, 17, 13, 11, 7, 5, 3, 2]
  • list.sort() 함수
    • 리스트 자체를 작은 수 정렬로 변환

      numbers = [19, 13, 2, 5, 3, 11, 7, 17]
      
      print(numbers.sort())  # sort 내부에는 리스트가 없으므로 None
      numbers.sort()
      print(numbers)
      None
      [2, 3, 5, 7, 11, 13, 17, 19]

리스트 인덱싱 연습

greetings = ["안녕", "니하오", "곤니찌와", "올라", "싸와디캅", "헬로", "봉주르"]
  • greetings 리스트의 원소를 모두 출력하는 프로그램을 작성해 보세요. while문과 리스트의 개념을 활용하시면 됩니다.출력하면 아래와 같은 결과물이 나와야 합니다.
안녕
니하오
곤니찌와
올라
싸와디캅
헬로
봉주르

풀이

	greetings = ["안녕", "니하오", "곤니찌와", "올라", "싸와디캅", "헬로", "봉주르"]
i = 0 
length = len(greetings)
while i < length:  # 인덱싱번호가 0부터라서 크기보다 1 작은 값까지 실행
    print(greetings[i])
    i += 1

온도 단위 바꾸기

💡

화씨 온도(°F)를 섭씨 온도(°C)로 바꾸어주는 프로그램을 만들려고 합니다.

섭씨와 화씨의 관계식은 다음과 같습니다:

화씨 온도를 섭씨 온도로 변환해 주는 함수 fahrenheit_to_celsius를 써 보세요. 이 함수를 파라미터로 화씨 온도 fahrenheit를 받고, 변환된 섭씨 온도를 리턴합니다.

위 프로그램을 실행하면 아래처럼 출력되어야 합니다.

화씨 온도 리스트: [40, 15, 32, 64, -4, 11]
섭씨 온도 리스트: [4.4, -9.4, 0.0, 17.8, -20.0, -11.7]

모범답안 풀이

  • 리스트 값을 1대1로 계산해줘야 한다.
  • 소수점 첫째 자리까지 반올림
    • round(값,1)
		# 화씨 온도에서 섭씨 온도로 바꿔 주는 함수
def fahrenheit_to_celsius(fahrenheit):
    return (fahrenheit - 32) * 5 / 9

temperature_list = [40, 15, 32, 64, -4, 11]
print("화씨 온도 리스트: {}".format(temperature_list))  # 화씨 온도 출력
i = 0
while i < len(temperature_list):
    temperature_list[i] = round(fahrenheit_to_celsius(temperature_list[i]),1)
    i += 1

print("섭씨 온도 리스트: {}".format(temperature_list))  # 섭씨 온도 출력

환전 서비스

  • 제가 구매하고 싶은 물건들의 가격을 리스트에 정리해 놨습니다.
prices = [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
  • 가격의 단위는 모두 원화(₩)인데요. 이 물건들의 가격을 미국 달러($)로 하면 얼마일지, 그리고 일본 엔화(¥)로 하면 얼마일지 확인해 보려고 합니다.
💡 **1. 함수 작성**

먼저 한국 원화를 미국 달러로 변환해 주는 krw_to_usd 함수, 그리고 미국 달러를 일본 엔화로 변환해 주는 usd_to_jpy 함수를 써야 하는데요. krw_to_usd 함수는 파라미터로 원화 krw을 받아서 변환된 미국 달러 액수를 리턴해 줍니다. 마찬가지로 usd_to_jpy 함수는 파라미터로 달러 usd를 받아서 변환된 일본 엔화 액수를 리턴해 주는 거죠.

참고로 환율은 1달러에 1,000원, 그리고 1,000엔에 8달러라고 가정합니다.

2. 반복문을 통해 리스트 요소들 변환

반복문을 사용해서 리스트의 요소들을 각각 다른 화폐로 변환해야 하는데요. 그 과정에서 krw_to_usd 함수와 usd_to_jpy 함수를 활용하면 되겠죠?

위 코드를 완성하고 실행하면 아래와 같이 출력됩니다.

한국 화폐: [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
미국 화폐: [34.0, 13.0, 5.0, 21.0, 1.0, 2.0, 8.0, 3.0]
일본 화폐: [4250.0, 1625.0, 625.0, 2625.0, 125.0, 250.0, 1000.0, 375.0]
  • 풀이
    # 원화(₩)에서 달러($)로 변환하는 함수
    def krw_to_usd(krw):
        return krw / 1000
    
    # 달러($)에서 엔화(¥)로 변환하는 함수
    def usd_to_jpy(usd):
        return usd / 0.008
    
    # 원화(₩)으로 각각 얼마인가요?
    prices = [34000, 13000, 5000, 21000, 1000, 2000, 8000, 3000]
    print("한국 화폐: " + str(prices))
     
    # prices를 원화(₩)에서 달러($)로 변환하기
    i = 0
    while i < len(prices):
        prices[i]  = krw_to_usd(prices[i])
        i += 1
    # 달러($)로 각각 얼마인가요?
    print("미국 화폐: " + str(prices))
    
    # prices를 달러($)에서 엔화(¥)으로 변환하기
    n = 0
    while n < len(prices):
        prices[n] = usd_to_jpy(prices[n])
        n += 1
    # 엔화(¥)으로 각각 얼마인가요?
    print("일본 화폐: " + str(prices))

리스트 함수 활용하기

💡 리스트 함수를 활용하여 아래의 지시 사항을 따르세요.
  1. numbers라는 빈 리스트를 만들고 리스트를 출력한다.
  2. append를 이용해서 numbers에 1736521314를 순서대로 추가한다. 그 후 리스트를 출력한다.
  3. numbers 리스트의 원소들 중 홀수는 모두 제거한다. 그 후 다시 리스트를 출력한다.
  4. numbers 리스트의 인덱스 0 자리에 20이라는 수를 삽입한 후 출력한다.
  5. numbers 리스트를 정렬한 후 출력한다.
  • 실행 결과
[]
[1, 7, 3, 6, 5, 2, 13, 14]
[6, 2, 14]
[20, 6, 2, 14]
[2, 6, 14, 20]
  • 풀이
    • 3번에서 홀 수 일 때 리스트를 삭제하면 그 다음 i 번호도 당겨짐

    • 짝수 일 경우에는 추가를 해줘야 함

      # 빈 리스트 만들기
      numbers = []
      print(numbers)
      
      # numbers에 값들 추가
      numbers.append(1)
      numbers.append(7)
      numbers.append(3)
      numbers.append(6)
      numbers.append(5)
      numbers.append(2)
      numbers.append(13)
      numbers.append(14)
      print(numbers)
      
      # numbers에서 홀수 제거
      i = 0
      while i < len(numbers):
          if numbers[i] % 2 == 1:
              del numbers[i]
          else:
              i += 1
          
      print(numbers)
      
      # numbers의 인덱스 0 자리에 20이라는 값 삽입
      numbers.insert(0, 20)
      print(numbers)
      
      # numbers를 정렬해서 출력
      numbers.sort()
      print(numbers)

리스트 꿀팁

  • **리스트에서 값의 존재 확인하기**
    • 어떤 값이 리스트에 있는지 확인하는 함수를 써보겠습니다.

      # value가 some_list의 요소인지 확인
      def in_list(some_list, value):
          i = 0
          while i < len(some_list):
              # some_list에서 value를 찾으면 True를 리턴
              if some_list[i] == value:
                  return True
              i = i + 1
      
          # 만약 some_list에서 value를 발견하지 못했으면 False를 리턴
          return False
      
      # 테스트
      primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
      print(in_list(primes, 7))
      print(in_list(primes, 12))
      True
      False
  • **in 으로 단축어**
    • 쓰는데 아주 어렵지는 않습니다. 하지만 리스트에 값의 존재를 확인하는 것은 너무 자주 있는 일이라서 파이썬에 이미 이 기능이 내장되어 있습니다. in이라는 키워드를 쓰면 됩니다.

      primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
      print(7 not in primes)
      print(12 not in primes)
      False
      True
  • **not** **in 으로 단축어**
    • 거꾸로 값이 없는지 확인하려면 in 앞에 not을 붙이면 됩니다.

      primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
      print(7 not in primes)
      print(12 not in primes)
      False
      True
  • **리스트 안의 리스트 (Nested List)**
    • 리스트 안에는 또 다른 리스트가 있을 수 있습니다. 이를 영어로 nested list
      라고 부릅니다.

      # 세 번의 시험을 보는 수업
      grades = [[62, 75, 77], [78, 81, 86], [85, 91, 89]]
      
      # 첫 번째 학생의 성적
      print(grades[0])
      
      # 세 번째 학생의 성적
      print(grades[2])
      
      # 첫 번째 학생의 첫 번째 시험 성적
      print(grades[0][0])
      
      # 세 번째 학생의 두 번째 시험 성적
      print(grades[2][1])
      
      # 첫 번째 시험의 평균
      print((grades[0][0] + grades[1][0] + grades[2][0]) / 3)
      [62, 75, 77]
      [85, 91, 89]
      62
      91
      75.0
  • **sort 메소드**
    • 저번에 정렬된 새로운
      리스트를 리턴시켜주는 sorted 함수를 보여드렸습니다. some_list.sort()는 새로운 리스트를 생성하지 않고 some_list를 정렬된 상태로 바꿔줍니다.

      numbers = [5, 3, 7, 1]
      numbers.sort()
      print(numbers)
      [1, 3, 5, 7]
  • **reverse 메소드**
    • some_list.reverse()some_list의 원소들을 뒤집어진 순서로 배치합니다.

      numbers = [5, 3, 7, 1]
      numbers.reverse()
      print(numbers)
      [1, 7, 3, 5]
  • remove 메소드
    • some_list.remove(x)some_list에서 첫 번째로 x의 값을 갖고 있는 원소를 삭제해줍니다.

      fruits = ["딸기", "당근", "파인애플", "수박", "참외", "메론"]
      fruits.remove("파인애플")
      print(fruits)
      ['딸기', '당근', '수박', '참외', '메론']
profile
ENTJ 데이터 분석가 준비중입니다:)

0개의 댓글