Lists - Learn Python 3 - Snakify

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)
Advertising by Google, may be based on your interests

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)

(다음 절에서이 코드가 어떻게 작동하는지 설명 할 것입니다.) 실수의 목록을 읽으려면 유형 intfloat 으로 변경해야합니다.

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 사용하여 동일한 효과를 얻을 수 있습니다.

Advertising by Google, may be based on your interests

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)
Advertising by Google, may be based on your interests

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] 는 목록 항목이며 조각이 아닙니다!

Advertising by Google, may be based on your interests

5. 목록 작업

목록을 사용하면 여러 가지 작업을 쉽게 수행 할 수 있습니다.

x in A
목록에있는 항목이 있는지 확인하십시오. True 또는 False를 반환합니다.
x는 A가 아니다.
동일하지 않음 (A에서 x)
분 (A)
목록의 가장 작은 요소
최대 (A)
목록에서 가장 큰 요소
A. 인덱스 (x)
리스트 내의 요소 x의 최초 출현의 인덱스. 없는 경우 예외를 생성합니다. ValueError
A.count (x)
목록에서 요소 x의 발생 횟수
Advertising by Google, may be based on your interests