파이썬 리스트 요소 추가, 삭제, 할당, 복사, map사용, 표현식 사용, 튜플 응용

Yeonu·2020년 11월 19일
3

Python 이론

목록 보기
9/30
post-thumbnail

리스트에 요소 추가하기

  • append: 요소 하나를 추가, 리스트도 추가할 수 있다.

    >>> a = [10, 20, 30]
    >>> a.append(500)
    # 실행 결과
    a = [10, 20, 30]
    
    >>> a = [10, 20, 30]
    >>> a.append([500, 600])
    
  • extend: 리스트를 연결하여 확장

    >>> a = [10, 20, 30]
    >>> a.extend([500, 600])
    >>> a
    [10, 20, 30, 500, 600]
  • insert: 특정 인덱스에 요소 추가

    >>> a = [10, 20, 30]
    >>> a.insert(2, 500)
    >>> a
    [10, 20, 500, 30]

    insert(0, 요소): 리스트의 맨 처음에 요소를 추가
    insert(len(리스트), 요소): 리스트 끝에 요소를 추가

    >>> a = [10, 20, 30]
    >>> a.insert(1, [500, 600]) # 요소로 리스트를 넣을 수 있다.
    >>> a
    [10, [500, 600], 20, 30]
    
    >>> a = [10, 20, 30]
    >>> a.insert(len(a), 500)
    >>> a
    [10, 20, 30, 500]



슬라이스에 요소 할당하기

>>> a = [10, 20, 30]
>>> a[1:1] = [500, 600] # 시작 인덱스와 끝 인덱스를 같게 지정하면
			# 해당 인덱스의 요소를 덮어쓰지 않으면서 요소 여러 개를 중간에 추가할 수 있다.
>>> a
[10, 500, 600, 20, 30]



리스트에서 요소 삭제하기

  • pop: 마지막 요소 또는 특정 인덱스의 요소를 삭제하고 반환
    >>> a = [10, 20, 30]
    >>> a.pop(1)
    20
    >>> a
    [10, 30]
    pop대신 del사용 가능
    >>> a = [10, 20, 30]
    >>> del a[1]
    >>> a
    [10, 30]
  • remove: 특정 값을 찾아서 삭제. 만약 리스트에 같은 값이 여러 개 있을 경우 처음 찾은 값을 삭제
    >>> a = [10, 20, 30, 20]
    >>> a.remove(20)
    >>> a
    [10, 30, 20]


리스트로 스택, 큐 만들기

스택 : append(), pop() 늦게 들어온 요소가 먼저 나감 FIFO
큐 : append(), pop(0) or insert(0, 요소), pop() 넣는 곳 빼는 곳 따로있음

파이썬에서 스택은 리스트를 그대로 활용해도 되지만, 큐는 좀 더 효율적으로 사용할 수 있도록 덱(deque, double ended queue)이라는 자료형을 제공한다. 덱은 양쪽 끝에서 추가/삭제가 가능한 자료 구조다.



리스트에서 특정 값의 인덱스 구하기

index(값) 사용

>>> a = [10, 20, 30, 15, 20, 40]
>>> a.index(20)
1

리스트에서 특정 값의 개수 구하기

count(값) 사용

>>> a = [10, 20, 30, 15, 20, 40]
>>> a.count(20)
2

리스트의 순서 뒤집기

reverse() 사용

>>> a = [10, 20, 30, 15, 20, 40]
>>> a.reverse()
>>> a
[40, 20, 15, 30, 20, 10]

리스트의 요소 정렬하기

sort()사용
sort() 또는 sort(reverse=False): 리스트의 값을 작은 순서대로 정렬(오름차순)
sort(reverse=True): 리스트의 값을 큰 순서대로 정렬(내림차순)

>>> a = [10, 20, 30, 15, 20, 40]
>>> a.sort()
>>> a
[10, 15, 20, 20, 30, 40]

sort메서드와 sorted 함수. 둘 다 정렬을 해주는 함수지만 sort는 메서드를 사용한 리스트를 변경하고, sorted 함수는 정렬된 새 리스트를 생성한다.

>> a = [10, 20, 30, 15, 20, 40]
>> a.sort()    # a의 내용을 변경하여 정렬
>> a
[10, 15, 20, 20, 30, 40]
>> b = [10, 20, 30, 15, 20, 40]
>> sorted(b)    # 정렬된 새 리스트를 생성
[10, 15, 20, 20, 30, 40]

리스트의 모든 요소 삭제하기(리스트 비우기)

clear() 사용

 ```
>>> a = [10, 20, 30]
>>> a.clear()
>>> a
[]
```

del list[:]와 같이 시작, 끝 인덱스를 생략해 사용 가능

  ```
>>> a = [10, 20, 30]
>>> del a[:]
>>> a
[]
```

리스트를 슬라이스로 조작하기

a[len(a):]는 시작 인덱스를 len(a) -> 3 로 지정해서 리스트의 마지막 인덱스보다 1이 더 큰 상태이다. 리스트 끝부터 시작하겠다는 의미가 된다.

  ```
>>> a = [10, 20, 30]
>>> a[len(a):] = [500]
>>> a
[10, 20, 30, 500]
# a. append(500)과 같다
```

리스트를 할당하면 a.extend([500,600])과 같다.

  ```
>>> a = [10, 20, 30]
>>> a[len(a):] = [500, 600]
>>> a
[10, 20, 30, 500, 600]
```

리스트가 비어있는지 확인하기 -> len함수로 리스트 길이를 구해 if문으로 판단

if not seq:    # 리스트가 비어 있으면 True
if seq:        # 리스트에 내용이 있으면 True

리스트가 비어있는데 마지막 인덱스 seq[-1]를 가져오면 에러남



리스트의 할당과 복사

할당 : 같은 객체를 참조한다.
a와 b는 한 쪽만 변경해도 나머지도 동일하게 변경된다. a is b = True

>>> a = [0, 0, 0, 0, 0]
>>> b = a

복사 : 값은 같아도 별개의 객체이다.
a와 b는 한 쪽만 변경하면 나머지는 변경되지 않는다. a is b = False, a == b True

>>> a = [0, 0, 0, 0, 0]
>>> b = a.copy()



반복문으로 리스트의 모든 요소 출력하기

for 변수 in 리스트:
반복할 코드

enumerate로 인덱스와 요소를 함께 출력하기

>> a = [38, 21, 53, 62, 19]
>> for index, value in enumerate(a):
	# enumerate(리스트, start=숫자):로 인덱스를 1부터 출력하게 지정 가능
...     print(index, value)
...
0 38
1 21
2 53
3 62
4 19

while문으로도 출력 가능하다.

while i < len(a):
    print(a[i])
    i += 1



리스트의 가장 작은 수, 큰 수 구하기

  1. for문으로 구하기
    >>> a = [38, 21, 53, 62, 19]
    >>> smallest = a[0]
    >>> for i in a:
    ...     if i < smallest: # 가장 큰 수는 부등호만 바꿔주면 된다.
    ...         smallest = i
    ...
    >>> smallest
    19
  2. sort()로 구하기
    >>> a = [38, 21, 53, 62, 19]
    >>> a.sort()
    >>> a[0]
    19
    >>> a.sort(reverse=True) #역순으로 정렬해 가장 큰 수 구하기
    >>> a[0]
    62
  3. min, max 함수이용하기
    >>> a = [38, 21, 53, 62, 19]
    >>> min(a)
    19
    >>> max(a)
    62


요소의 합계 구하기

  1. for문으로 구하기
    >>> a = [10, 10, 10, 10, 10]
    >>> x = 0
    >>> for i in a:
    ...     x += i
    ...
    >>> x
    50
  2. sum 함수로 구하기
    >>> a = [10, 10, 10, 10, 10]
    >>> sum(a)
    50

min, max, sum에는 리스트뿐만 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있다. 반복 가능한 객체는 리스트, 튜플, 딕셔너리, 세트, range 등 여러 가지가 있다.



리스트 표현식(comprehension)

식으로 지정해서 생성된 것을 리스트로 잡아두는 것

[식 for 변수 in 리스트]
list(식 for 변수 in 리스트)

>>> a = [i for i in range(10)]        # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b = list(i for i in range(10))    # 0부터 9까지 숫자를 생성하여 리스트 생성
>>> b
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

i 값에 연산, if 조건문, 다중 for문 등의 사용이 가능하다.

>> b = [i + 5 for i in range(10) if i % 2 == 1] 
# 0~9 숫자 중 홀수에 5를 더하여 리스트 생성
>> b
[6, 8, 10, 12, 14]

처리 순서는 뒤에서 앞이다.



리스트에 map 사용하기

map은 리스트의 요소를 지정된 함수로 처리해주는 함수다. map은 원본 리스트를 변경하지 않고 새 리스트를 생성한다.

list(map(함수, 리스트))
tuple(map(함수, 튜플))

실수가 저장된 리스트의 모든 요소를 정수로 변환 for문과 map 사용

>> a = [1.2, 2.5, 3.7, 4.6]
>> for i in range(len(a)):
...     a[i] = int(a[i])
>> a
[1, 2, 3, 4]
>> a = [1.2, 2.5, 3.7, 4.6]
>> a = list(map(int, a))
>> a
[1, 2, 3, 4]

map에는 리스트뿐만 아니라 모든 반복 가능한 객체를 넣을 수 있다.

>> a = list(map(str, range(10)))
>> a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

input().split()의 값은 리스트라서 map을 사용할 수 있다.

>> a = input().split()
10 20 (입력)
>> a
['10', '20'] # 리스트!!
>> a = map(int, input().split())
10 20 (입력)
>> a
<map object at 0x03DFB0D0> # map객체 상태로는 안의 값을 볼 수 없다.
>> list(a) # list를 통해 출력
[10, 20]



튜플 응용하기

index(값)으로 인덱스 구하기
count(값)으로 특정 값 개수 구하기
for문으로 요소 출력
튜플 표현식(comprehension)사용
튜플에 map 사용하기
min(튜플), map(튜플), sum(튜플) 이용하기

모두 리스트와 같다. 다만 튜플은 내용 변경이 불가능하다는 점 유의


@심사문제 22.10

두 개의 정수를 입력받아 첫 번째 정수부터 두 번째 정수까지를 지수로 하는 2의 거듭제곱 리스트를 출력. 단, 리스트의 두 번째 요소와 뒤에서 두 번째 요소는 삭제한 뒤 출력. 출력 결과는 리스트이다.

a,b = map(int,input().split())
x = [2**i for i in range(a,b+1)]
x.pop(1)
x.pop(-2)
print(x)
입력

1 10

결과

[2, 8, 16, 32, 64, 128, 256, 1024]

0개의 댓글