시퀀스 자료형
특정 값이 있는 지 확인하기
- in을 이용해서 값이 시퀀스 객체 안에 있는 지 확인 할 수 있다.
- 반대로 앞에 not을 붙이면 특정 값이 없는 지 확인 할 수 있다.
a = [1, 2, 3, 4, 5] 3 in a 6 in a 1 not in a 6 not in a
True
False
False
True
- tuple, range, 문자열에도 적용 가능하다.
시퀀스 객체 연결하기
- 시퀀스 객체의 연결은 +연산자를 이용하여 연결할 수 있다.
a = [1, 2, 3] b = [4, 5, 6] print(a + b)
[1, 2, 3, 4, 5, 6]
- 하지만 range는 +연산자로 연결할 수 없지만 range를 list나 tuple로 변환하여 연결할 수 있다.
print(list(range(0, 5)) + list(range(5, 10)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
시퀀스 반복하기
- * 연산자를 사용하면 시퀀스의 객체들이 반복된다.
print([0, 1, 2] * 3)
[0, 1, 2, 0, 1, 2, 0, 1, 2]
- 하지만 range는 *연산자로 반복할 수 없지만 range를 list나 tuple로 변환하여 반복할 수 있다.
시퀀스 객체의 요소의 개수 구하기
- len함수를 사용하면 요소의 개수를 구할 수 있다.
a = [0, 1, 2, 3, ] len(a)
10
시퀀스 객체와 인덱스
- 시퀀스 객체에 들어있는 요소에 인덱스로 접근하는 방법이 있다.
- 사용방법은 시퀀스 객체에 대괄호를 붙이고 각 요소에 인덱스를 지정하면 인덱스에 해당 하는 값이 나온다.
a = [1, 2, 3] b = (1, 2, 3) print(a[1]) print(b[0])
2
1
- 시퀀스 객체 범위에 벗어난 인덱스를 지정하면 오류가 난다.
요소에 값 지정과 삭제하기
- 시퀀스 객체 범위내에 있는 요소를 바꿀 때엔 범위 내에 인덱스를 지정하고 값을 초기화하면 된다.
- 요소를 삭제하고 싶을 때엔 del함수 뒤에 삭제하고 싶은 인덱스를 지정해주면 된다.
- tuple과 range, 문자열은 읽기 전용이므로 값 지정과 삭제가 불가능하다.
a = [1, 2, 3] a[1] = 5 print(a) del a[2] print(a)
[1, 5, 3]
[1, 5]
11.5 퀴즈
- 다음 중 시퀀스 자료형에 대한 설명으로 잘못된 것을 모두 고르세요.
- in 연산자는 시퀀스 객체 안에 특정 값이 없는지 확인한다.
- range는 * 연산자로 반복할 수 없다.
- 문자열 str은 시퀀스 자료형이다.
- + 연산자로 두 시퀀스 객체를 연결하면 첫 번째 객체 안에 두 번째 객체가 들어간다.
- len 함수는 시퀀스 객체에 들어있는 요소 개수를 구한다.
정답 : 1, 4
풀이 : 1 - in 연산자는 시퀀스 객체 안에 특정 값이 있는지 확인한다. 4 - + 연산자로 두 시퀀스 객체를 연결하면 새 객체가 생성된다.
- 리스트 a = [10, 20, 30, 40, 50, 60]에서 인덱스로 요소를 가져왔을 때 값이 올바르지 않은 것을 모두 고르세요.
- a[0]은 10
- a[1]은 10
- a[3]은 40
- a[-1]은 50
- a[-1]은 60
정답 : 2, 4
풀이 : 2 - a[1] = 20 4 - a[4] = 60
- 튜플 a = (11, 22, 33, 44, 55, 66, 77, 88, 99)에서 (11, 55, 99)을 가져오는 방법으로 올바른 것을 모두 고르세요.
- a[0:9]
- a[0:9:3]
- a[::4]
- a[0:6:2]
- a[0:len(a):4]
정답 : 3, 5
풀이 : 3 - ::는 시작과 끝을 의미하고 차이는 4씩 나므로 맞는 답이다. 5 - 시작 인덱스와 끝 인덱스에 튜플의 길이를 지정하고 차이는 4씩 나므로 맞는 답이다.
- 다음 중 시퀀스 자료형의 슬라이스에 대한 설명으로 잘못된 것을 모두 고르세요.
- 시퀀스 객체에 슬라이스로 범위를 지정하여 요소에 값을 할당하면 새 객체가 생성된다.
- 문자열은 슬라이스를 사용하여 일부를 가져올 수 있다.
- 튜플은 슬라이스를 사용하여 일부를 가져올 수 없다.
- range 객체는 슬라이스로 범위를 지정하여 요소를 할당할 수 없다.
- 시퀀스 객체에 인덱스 증가폭을 지정하여 요소를 할당할 때는 슬라이스 범위의 요소 개수와 할당할 요소 개수가 정확히 일치해야 한다.
정답 : 1, 3
풀이 : 1 - 시퀀스 객체에 슬라이스로 범위를 지정하면 원래 있던 객체가 변경되며 새 객체는 생성되지 않는다. 3- 튜플은 슬라이스를 사용하여 일부를 가져올 수 있다.
11.6 연습문제: 최근 3년간 인구 출력하기
- 리스트 year에 연도, population에 서울시 인구수가 저장되어 있습니다. 다음 소스 코드를 완성하여 최근 3년간 연도와 인구수가 리스트로 출력되게 만드세요.
year = [2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018] population = [10249679, 10195318, 10143645, 10103233, 10022181, 9930616, 9857426, 9838892] print( ) print( )
결과) [2016, 2017, 2018] [9930616, 9857426, 9838892]
정답) year(-3:) population(-3:)
풀이) 두 리스트 모두 뒤에서 3번째부터 끝까지 출력되고 있으므로 인덱스를 이용해서 -3부터 끝까지로 출력하면 된다.
11.7 연습문제: 인덱스가 홀수인 요소 출력하기
- 다음 소스 코드를 완성하여 튜플 n에서 인덱스가 홀수인 요소들이 출력되게 만드세요.
n = -32, 75, 97, -10, 9, 32, 4, -15, 0, 76, 14, 2 print( )
결과) (75, -10, 32, -15, 76, 2)
정답 : n[1::2]
풀이 : 시작 인덱스는 1이고 인덱스 증가폭은 2가 되어야 홀수인 요소들이 출력되고 인덱스 전체에서 구하는 것이므로 생략한다.
11.8 심사문제: 리스트의 마지막 부분 삭제하기
- 표준 입력으로 숫자 또는 문자열 여러 개가 입력되어 리스트 x에 저장됩니다(입력되는 숫자 또는 문자열의 개수는 정해져 있지 않음). 다음 소스 코드를 완성하여 리스트 x의 마지막 요소 5개를 삭제한 뒤 튜플로 출력되게 만드세요.
x = input().split() ________________ ________________
입력) 1 2 3 4 5 6 7 8 9 10 결과) ('1', '2', '3', '4', '5')
정답 : a =tuple(x[0:-5]) print(a)
풀이 : 변수 a에 리스트x를 슬라이싱하고 튜플로 변환한 값을 집어넣고 a를 출력한다.
11.9 심사문제: 문자열에서 인덱스가 홀수인 문자와 짝수인 문자 연결하기
- 표준 입력으로 문자열 두 개가 각 줄에 입력됩니다(문자열의 길이는 정해져 있지 않음). 첫 번째 문자열에서 인덱스가 홀수인 문자와 두 번째 문자열에서 인덱스가 짝수인 문자를 연결하여 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 연결 순서는 첫 번째 문자열, 두 번째 문자열 순입니다. 그리고 0은 짝수로 처리합니다.
________________ ________________ ________________
입력) python python 결과) yhnpto --------------------- 입력) apple strawberry 결과) plsrwer
정답 : a = input() b = input() print(a[1::2] + b[0::2])
풀이 : 문제에서 입력을 두 줄로 입력을 따로 했으므로 변수 a,b에 각각 저장을 하고 첫 번째에 입력한 문자열을 홀수인 문자열로 슬라이싱 하려면 첫번째 인덱스는 1이고, 문자열 끝까지 출력해야하기 때문에 끝 인덱스를 생략하고 홀수만 출력하려면 차이 2인덱스 나야한다. 이러한 방식으로 b도 슬라이싱하고 두 변수를 +로 연결하여 출력하면 된다.