Lesson 7
기울기
1. 기울기
대부분의 프로그램은 변수와 함께 작동합니다. 또한 변수 목록을 사용합니다. 예를 들어, 프로그램은 키보드 나 파일에서 학생 목록을 읽음으로써 학급의 학생에 대한 정보를 처리 할 수 있습니다. 수업에 참여하는 학생 수의 변화로 인해 프로그램 소스 코드를 수정할 필요가 없어야합니다.
예전에는 시퀀스의 가장 큰 요소를 계산할 때와 같이 이미 시퀀스의 요소를 처리하는 작업을 이미 마쳤습니다. 그러나 우리는 전체 시퀀스를 컴퓨터 메모리에 보관하지 않았습니다. 그러나 많은 문제에서 시퀀스의 모든 요소를 오름차순으로 ( "시퀀스 정렬") 인쇄해야하는 것처럼 전체 시퀀스를 유지해야합니다.
그러한 데이터를 저장하기 위해 파이썬에서 list 라는 데이터 구조를 사용할 수 있습니다 (대부분의 프로그래밍 언어에서 "배열"이라는 용어가 사용됩니다). 목록은 문자열의 문자와 마찬가지로 0부터 번호가 매겨진 요소의 시퀀스입니다. 목록은 다음과 같이 대괄호로 묶인 목록 요소를 열거하여 수동으로 설정할 수 있습니다.
Primes = [2, 3, 5, 7, 11, 13] Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet']
Primes
목록에는 6 개의 요소가 있습니다 : Primes[0] == 2
, Primes[1] == 3
, Primes[2] == 5
, Primes[3] == 7
, Primes[4] == 11
, Primes[5] == 13
. Rainbow
목록에는 7 개의 요소가 있으며 각 요소는 문자열입니다.
문자열의 문자와 마찬가지로 목록 요소는 음수 인덱스 (예 : Primes[-1] == 13
, Primes[-6] == 2
가질 수도 있습니다. 음수 색인은 마지막 요소에서 시작하여 목록을 읽을 때 왼쪽으로 이동 함을 의미합니다.
목록에서 len(Primes) == 6
과 같이 len
( 목록의 길이를 의미) 함수를 사용하여 목록의 요소 수를 얻을 수 있습니다.
문자열과 달리 목록의 요소는 변경 가능합니다. 새로운 값을 할당하여 변경할 수 있습니다.
Rainbow = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] print(Rainbow[0]) Rainbow[0] = 'red' print('Print the rainbow') for i in range(len(Rainbow)): print(Rainbow[i])
목록을 만들고 읽는 몇 가지 방법을 고려하십시오. 우선, 당신은 빈 목록을 만들 수 있습니다 (아무 항목 목록을, 길이가 0), 당신은 사용하여 목록의 끝에 항목을 추가 할 수 있습니다 append
. 예를 들어, 프로그램이 목록 n
의 요소 수를받은 다음 목록의 n
요소를 각각 별도의 줄에 하나씩 받았다고 가정합니다. 다음은이 형식의 입력 데이터 예제입니다.
5 1809 1854 1860 1891 1925이 경우 다음 목록에서 읽기를 구성 할 수 있습니다.
a = [] # 빈 목록 시작 n = int(input()) # 목록에있는 요소의 수를 읽는다. for i in range(n): new_element = int(input()) # 다음 요소를 읽다. a.append(new_element) # 목록에 추가 # 마지막 두 줄은 한 줄로 바꿀 수 있습니다. # a.append (int (input ())) print(a)
시연 된 예제에서 빈리스트가 생성 된 다음, 엘리먼트의 수를 읽은 다음리스트 항목을 한 줄씩 읽고 끝에 추가합니다. 변수 n
저장하는 동일한 작업을 수행 할 수 있습니다.
a = [] for i in range(int(input())): a.append(int(input())) print(a)
목록에 대해 정의 된 몇 가지 작업이 있습니다. 목록 연결 (목록 추가, 즉 하나의 목록을 다른 목록에 붙여 넣기) 및 반복 (목록을 숫자로 곱하기)입니다. 예 :
a = [1, 2, 3] b = [4, 5] c = a + b d = b * 3 print([7, 8] + [9]) print([0, 1] * 3)
결과 목록 c
는 [1, 2, 3, 4, 5]
와 같고 d
의 목록은 [4, 5, 4, 5, 4, 5]
. 이렇게하면 목록을 다르게 읽는 프로세스를 구성 할 수 있습니다. 먼저 목록의 크기를 고려하여 원하는 수의 요소에서 목록을 만든 다음 숫자 0으로 시작하는 변수 i
와 루프 읽기 i
번째 요소 내부를 반복합니다 목록의 :
a = [0] * int(input()) for i in range(len(a)): a[i] = int(input())
목록 a
요소를 print(a)
로 print(a)
할 수 있습니다. 대괄호로 묶이고 쉼표로 구분 된 목록 항목을 표시합니다. 일반적으로 이것은 불편합니다. 일반적으로 모든 요소를 한 줄 또는 한 줄에 하나씩 인쇄하려고합니다. 다음은 루프의 다른 형태를 사용하는 두 가지 예입니다.
a = [1, 2, 3, 4, 5] for i in range(len(a)): print(a[i])
여기서 인덱스 i
가 변경되면 요소 a[i]
가 표시됩니다.
a = [1, 2, 3, 4, 5] for elem in a: print(elem, end=' ')
이 예제에서 목록 항목은 공백으로 구분 된 한 줄에 표시되며 변경된 색인이 아니라 변수 자체의 값입니다 (예 : for elem in ['red', 'green', 'blue']
대한 루프 for elem in ['red', 'green', 'blue']
변수 elem
은 'red'
, 'green'
, 'blue'
연속적으로 취합니다.
마지막 예에 특별한주의를 기울이십시오! 파이썬 이데올로기에서 매우 중요한 부분은 for
시퀀스입니다.이 시퀀스는 일부 시퀀스의 모든 요소를 반복하는 편리한 방법을 제공합니다. 이것은 파이썬이 파스칼과 다른 점입니다. 파스칼에서는 요소의 인덱스 를 반복해야하지만 요소 자체는 반복하지 않아야합니다.
파이썬의 시퀀스는 문자열,리스트, 함수 range()
값 range()
(목록이 아님) 및 기타 다른 객체입니다.
다음은 문자열에서 모든 자릿수를 추출하고 숫자 목록을 작성하는 데 필요한 for
루프의 사용 예를 보여줍니다.
# 주어진 : s = 'ab12c59p7dq' # 목록에서 숫자를 추출해야합니다. # 그것을 그렇게 만드십시오 : # 디지트 == [1, 2, 5, 9, 7] s = 'ab12c59p7dq' digits = [] for symbol in s: if '1234567890'.find(symbol) != -1: digits.append(int(symbol)) print(digits)
2. 분할 및 조인 메소드
목록 항목은 문자로 구분 된 한 줄로 표시 할 수 있습니다. 이 경우 input()
사용하여 전체 목록을 읽을 수 있습니다. 그런 다음 문자열 메서드 split()
을 사용하면 초기 문자열을 공백으로 잘라낸 문자열 결과 목록을 반환합니다. 예:
# 입력은 문자열입니다. # 1 2 3 s = input() # s == '1 2 3' a = s.split() # a == [ '1', '2', '3'] print(a)
이 프로그램을 입력 데이터 1 2 3
으로 실행하면 목록 a
는 ['1', '2', '3']
. 목록은 숫자가 아닌 문자열로 구성됩니다. 숫자 목록을 가져 오려면 목록 항목을 하나씩 정수로 변환해야합니다.
a = input().split() for i in range(len(a)): a[i] = int(a[i]) print(a)
파이썬 생성기의 특별한 마술을 사용하면 똑같은 작업을 한 줄로 할 수 있습니다.
a = [int(s) for s in input().split()] print(a)
(다음 절에서이 코드가 어떻게 작동하는지 설명 할 것입니다.) 실수의 목록을 읽으려면 유형 int
를 float
으로 변경해야합니다.
split()
메서드는 목록 항목 사이의 구분 기호로 사용할 문자열을 결정하는 선택적 매개 변수를가집니다. 예를 들어 split('.')
메서드를 호출하면 초기 문자열을 분할하여 얻은 목록이 반환 '.'
마주 친다 :
a = '192.168.0.1'.split('.') print(a)
파이썬에서는 한 줄 명령을 사용하여 문자열 목록을 표시 할 수 있습니다. 이를 위해 join
메소드가 사용됩니다. 이 메소드에는 하나의 매개 변수, 즉 문자열 목록이 있습니다. 주어진 요소를 연결하여 얻은 문자열을 반환하고 구분 기호는 목록의 요소 사이에 삽입됩니다. 이 구분 기호는 적용된 메소드가있는 문자열과 동일합니다. 우리는 당신이 처음부터 이전 문장을 이해하지 못했다는 것을 압니다. :) 예제를보세요.
a = ['red', 'green', 'blue'] print(' '.join(a)) # 빨간색 녹색 파란색을 반환합니다. print(''.join(a)) # redgreenblue를 반환하십시오. print('***'.join(a)) # 빨간색을 반환합니다 *** 녹색 *** 파란색
목록이 숫자로 구성되어 있다면, 당신은 발전기의 어두운 마법을 사용해야합니다. 목록의 요소를 공백으로 구분하여 출력하는 방법은 다음과 같습니다.
a = [1, 2, 3] print(' '.join([str(i) for i in a])) # 다음 행은 유형 오류를 일으키고, # join ()은 strs 만 연결할 수 있기 때문에 # print ( ''.join (a))
그러나 어두운 마법의 팬이 아니라면 루프 for
사용하여 동일한 효과를 얻을 수 있습니다.
3. 발전기
동일한 항목으로 채워지는 목록을 만들려면 다음과 같이 목록 반복을 사용할 수 있습니다.
n = 5 a = [0] * n print(a)
더 복잡한 목록을 만들려면 생성자 를 사용할 수 있습니다. 수식에 따라 목록을 채울 수있는 표현식입니다. 발전기의 일반적인 형태는 다음과 같습니다 :
[expression for variable in sequence]
여기서 variable
은 일부 변수의 ID이고, sequence
는 변수를 취하는 값의 순서이며,이 변수는 목록, 문자열 또는 함수 range
를 사용하여 얻은 객체 일 수 있습니다. expression
- 대개 변수에 따른 표현식 발전기에 사용됩니다. 목록 요소는이 표현식에 따라 채워질 것입니다.
다음은 발전기를 사용하는 사람들의 몇 가지 예입니다.
생성기를 사용하여 n
0 목록을 만드는 방법은 다음과 같습니다.
a = [0 for i in range(5)] print(a)
다음은 정수 제곱으로 채워지는 목록을 만드는 방법입니다.
n = 5 a = [i ** 2 for i in range(n)] print(a)
1에서 n
까지의 숫자의 제곱 목록을 작성해야하는 경우 range
설정을 range(1, n + 1)
변경할 수 있습니다.
n = 5 a = [i ** 2 for i in range(1, n + 1)] print(a)
다음은 (사용 1 ~ 9까지 임의의 숫자로 채워진 목록을 얻을 수있는 방법은 randrange
모듈에서 random
) :
from random import randrange n = 10 a = [randrange(1, 10) for i in range(n)] print(a)
이 예제에서 목록은 표준 입력에서 읽은 행으로 구성됩니다. 먼저 목록의 요소 수 (이 값은 함수 range
의 인수로 사용됨)를 입력해야하며, 두 번째 - 해당 문자열 수입니다.
a = [input() for i in range(int(input()))] print(a)
4. 조각
목록과 문자열을 사용하면 조각을 할 수 있습니다. 즉:
A[i:j]
슬라이스 ji
요소 A[i]
, A[i+1]
, ..., A[j-1]
.
A[i:j:-1]
슬라이스 ij
요소 A[i]
, A[i-1]
, ..., A[j+1]
(즉, 요소의 순서를 변경한다).
A[i:j:k]
는 단계 k
: A[i]
, A[i+k]
, A[i+2*k]
자른다. k
<0의 값이면 요소는 반대 순서로옵니다.
숫자 i
또는 j
각각이 누락 될 수 있으며, "줄의 시작"또는 "줄의 끝"을 의미합니다.
문자열과 달리 목록은 변경 가능한 개체입니다 . 목록 항목을 새 값에 할당 할 수 있습니다. 또한 전체 슬라이스를 변경할 수도 있습니다. 예 :
A = [1, 2, 3, 4, 5] A[2:4] = [7, 8, 9] print(A)
여기서 우리는리스트 [1, 2, 3, 4, 5]
받았고 슬라이스 A[2:4]
의 두 요소를 세 요소의 새로운 목록으로 대체하려고했습니다. 결과 목록은 [1, 2, 7, 8, 9, 5]
입니다.
A = [1, 2, 3, 4, 5, 6, 7] A[::-2] = [10, 20, 30, 40] print(A)
여기에 결과 목록은 [40, 2, 30, 4, 20, 6, 10]
됩니다. 그 이유는 A[::-2]
는 A[-1]
, A[-3]
, A[-5]
, A[-7]
의 원소들의리스트이고, 그 원소들은 10, 20, 30, 40)에 각각 연결된다.
불연속 슬라이스 (즉, 단계 k
, k > 1
슬라이스)에 새 값이 할당되면 이전 슬라이스와 새 슬라이스의 요소 수가 반드시 일치해야합니다. 그렇지 않으면 Error ValueError
오류가 발생합니다.
A[i]
는 목록 항목이며 조각이 아닙니다!
5. 목록 작업
목록을 사용하면 여러 가지 작업을 쉽게 수행 할 수 있습니다.
x in A | 목록에있는 항목이 있는지 확인하십시오. True 또는 False를 반환합니다. |
x는 A가 아니다. | 동일하지 않음 (A에서 x) |
분 (A) | 목록의 가장 작은 요소 |
최대 (A) | 목록에서 가장 큰 요소 |
A. 인덱스 (x) | 리스트 내의 요소 x의 최초 출현의 인덱스. 없는 경우 예외를 생성합니다. ValueError |
A.count (x) | 목록에서 요소 x의 발생 횟수 |