> For the complete documentation index, see [llms.txt](https://study-code.gitbook.io/python-basic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://study-code.gitbook.io/python-basic/undefined-1/undefined-5.md).

# List

## List

중학교 수학책 가장 처음에 나오는 집합을 기억하시죠? \
특정 값들의 묶음을 리스트(List)라고 생각하시면 됩니다. \
리스트는 내가 원하는 것들을 묶어두고 필요할 때 추가, 삭제, 읽기, 수정이 가능합니다.

## 만들기

```python
list = [1, 5, 3, 6]
stringList = ['Hi', 'Hello', 'Hey']
combineList = [1, 'Hello', 3, 'Hi']
inList = [1, 3, ['Hi', 'Hello']]
```

리스트는 대괄호(\[ ])를 사용하고 내부 요소들은 쉼표(,)를 이용해 구분하게 됩니다.

## 사용하기

### 읽기

#### 전체 값 출력

```
list = [1, 5, 3, 6]
print(list)
```

#### 특정 위치의 값&#x20;

```
list = [1, 5, 3, 6]
print(list[1])
```

list의 1번째 값을 출력하도록 했습니다.\
결과는 5가 출력됩니다. 왜 그런지 알아보죠. \
리스트는 아래와 같은 구성으로 되어있습니다.

| list의 값          | 1  | 5  | 3  | 6  |
| ---------------- | -- | -- | -- | -- |
| 순서               | 1번 | 2번 | 3번 | 4번 |
| 인덱스 or 포지션 or 위치 | 0  | 1  | 2  | 3  |
| 마이너스 인덱스         | -4 | -3 | -2 | -1 |

list\[인덱스]를 사용하게 되면 list의 인덱스 위치의 값이 반환됩니다.\
list\[1]의 값을 출력했을 때 위치 1번이 아닌 인덱스 1 위치의 5값이 출력됩니다.

```python
list = [1, 5, 3, 6]
print(list[-1])
```

인덱스는 -(마이너스) 값을 사용할 수 있습니다.\
위의 결과는 6이 출력됩니다.

#### 여려 값 동시에 가져오기

```python
list = [1, 5, 3, 6]
print(list[2:4])
```

여러 값을 가져오기 위해서 \[2:4]라고 적었습니다.\
2시작 지점의 인덱스 (2 이상) : 4 끝점의 인덱스(4 미만)\
2, 3 인덱스의 값을 가져오게 됩니다.

```python
list = [1, 5, 3, 6]
print(list[2:])
```

앞서 내용과 다른점은 2: 이후 어디까지 인지 위치 값이 없습니다. \
2 이상 끝까지 값을 가져옵니다.

```python
list = [1, 5, 3, 6]
print(list[:2])
```

설명 안해도 느낌 오죠?

### 수정

```
list = [1, 5, 3, 6]
list[0] = 10
print(list)
```

02  list의 0번째 값을 10으로 변경

리스트의 첫 번째 값이 10으로 변경된것을 확인할 수 있습니다.\
리스트의 값을 어려개 가져올수 있는 것처럼 어려개를 동시에 변경할 수 있습니다.

```
list = [1, 5, 3, 6]
list[0:2] = [10, 50]
print(list)
```

02  리스트의 0, 1번 째 값을 10, 50 으로 변경

\[0:2]는 0 이상 2 미만의 위치라고 이야기 드렸죠.\
그럼 우리는 0번과 1번의 값을 10, 50으로 변경하게 됩니다.

#### !!조심할점

```python
list = [1, 5, 3, 6]
list[0:2] = [10, 50, 40, 60]
print(list)
```

출력을 해보면 예상과 다르게 나올것 입니다.\
0\~1번 째까지는 값이 변경되고 이후 값은 추가가 됩니다.\
어려개를 변경할 때는 인덱스와 추가하는 값을 잘 확인하셔야 합니다.!!

### 추가

추가는 List에 만들어져 있는 append, insert 함수를 이용합니다.

#### 젤 뒤에 추가

```python
list = [1, 5, 3, 6]
list.append(8)
print(list)
```

#### 원하는 위치에 추가

지금까지 1,5, 3, 6 의 리스트를 사용해왔습니다. 5, 3 사이에 4 값을 추가하겠습니다.

```python
list = [1, 5, 3, 6]
list.insert(2, 4)
print(list)
```

02  insert 함수는 insert(인덱스, 값) 으로 구성됩니다.

5와 3 사이는 인덱스 1, 2 입니다. \
5와 3사이에 4값을 추가 하기위해서는 인덱스 2번에 4 값을 추가해야 겠죠.&#x20;

### 삭제

#### 위치 값 이용

원하는 위치의 값을 삭제합니다.\
젤 처음 1의 값을 삭제하겠습니다.

```python
list = [1, 5, 3, 6]
del list[0]
print(list)
```

02  del list\[0]  del 명령어를 이용해 list의 0번째 값을 삭제 했습니다.

#### 요소 값 이용

3번 값을 삭제하고 싶은데 리스트가 아주 길다면 눈으로 위치를 찾는거는 쉽지 않을 것 입니다.\
이때 사용할 수 있습니다.

```python
list = [1, 5, 3, 6]
list.remove(3)
print(list)
```

02  list 내부 값 중에 3을 삭제\
만약에 리스트에 3값이 어려개가 있는 경우 첫 번째 것만 삭제 됩니다.

```python
list = [1, 5, 3, 6, 3]
list.remove(3)
print(list)
```

## 알아두면 편한 함수

#### 갯수 구하기

```python
list = [1, 5, 3, 6, 3]
print(len(list))
```

#### 값의 위치 가져오기

```python
list = [1, 5, 3, 6, 3]
print(list.index(3))
```

#### 정렬(Sort)

```python
list = [1, 5, 3, 6, 3]
list.sort()
print(list)
```

#### 역순정렬

```python
list = [1, 5, 3, 6, 3]
list.sort(reverse=True)
print(list)
```

#### 역순 (Reverse)

```python
list = [1, 5, 3, 6, 3]
list.reverse()
print(list)
```

#### 값을 가져오며 삭제하기

```python
list = [1, 5, 3, 6, 3]
popValue = list.pop()
print(popValue)
print(list)
```

02  리스트 제일 뒤 값을 가져오며 리스트에서 삭제한다.

```python
list = [1, 5, 3, 6, 3]
popValue = list.pop(0)
print(popValue)
print(list)
```

02  리스트의 제일 처음 값을 가져오며 리스트에서 삭제한다.

#### 리스트 합치기

```python
list = [1, 5, 3, 6, 3]
listExtends = ['hi', 'hello']
list.extend(listExtends)
print(list)
```

## 문

예제 1\
다음과 같은 리스트가 있다.

```python
list = [1, 3, 5, 7, 9, 11]
```

리스트를 이용해서 값 1을 구하세요. 몇 가지 방법이 있을까요?

{% code title="참고 코드" %}

```python
list = [1, 3, 5, 7, 9, 11]
print(list[0])
print(list[3] - list[0] - list[0])
print(list[4] - list[1] + list[2])
```

{% endcode %}

예제2\
다음과 같은 리스트가 있다.

```
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8]
```

1,2,3,4,5,6,7,8,9 를 출력하세요. 가능한 많은 방법을 찾아보세요.

{% code title="참고 코드" %}

```python
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8]

list3 = list1 + list2
list3.sort()
print(list3)

list1.extend(list2)
list1.sort()
print(list1)

list3 = []
list3.append(list1[0])
list3.append(list2[0])
list3.append(list1[1])
list3.append(list2[1])
list3.append(list1[2])
list3.append(list2[2])
print(list3)

```

{% endcode %}

예제3\
어느 식당에 갔다. \
음식을 주문하려고 메뉴판을 보니

| T1 | 소고기 쌀국수   | 7,000원  |
| -- | --------- | ------- |
| T2 | 소고기 매운쌀국수 | 7,500원  |
| P1 | 파인애플 볶음밥  | 8,000원  |
| P2 | 해물볶음면     | 8,500원  |
| Q1 | 월남쌈       | 12,000원 |

주문을 T1, P2을 했을 때 총 가격은 얼마인가요? \
주문은 다양하게 변화 할 수 있습니다.

{% code title="참고 코드" %}

```python
#입력받는다.
user_order = input('주문 하세요.')
if(user_order == 'Menu') :
    print("T1, 소고기 쌀국수     7,000원")
    print("T2, 소고기 매운쌀국수  7,000원")
    print("P1, 파인애플 볶음밥   7,000원")
    print("P1, 해물볶음면       7,000원")
    print("Q1, 월남쌈          7,000원")
    user_order = input('주문 하세요.')
# "T1,P1,q1" 문자열
#입력받은 것을 자른다(,)
orders = user_order.lower().split(',')
#[t1, p1, q1]
#입력받은 주문이 몇개인지 확인한다.
count = len(orders);
#3
#입력받은 주문의 가격이 얼마인지 구한다.
price = [7000, 7500, 8000, 8500, 12000]
menu = ['t1', 't2', 'p1', 'p2', 'q1']
#주문의 가격을 모두 더한다.
if(count == 1) :
    price_pos = menu.index(orders[0])
    print(price[price_pos])
elif(count == 2):
    price_pos = menu.index(orders[0])
    price_pos1 = menu.index(orders[1])
    print(price[price_pos] + price[price_pos1])
elif(count == 3):
    price_pos = menu.index(orders[0])
    price_pos1 = menu.index(orders[1])
    price_pos2 = menu.index(orders[2])
    print(price[price_pos] + price[price_pos1]+ price[price_pos2])
else:
    print('1111')
```

{% endcode %}

예제 4\
입력값 0이 아닌 경우 내용을 계속 입력받고, 0을 입력하면 이전 입력값을 하나식 보여주도록 하세요.\
999입력 시 종료, 998 입력 시 남아있 값 출력\
ex) 사용자 입력 \
\>> 1\
\>> 123\
\>> 23\
\>> 4\
\>> 234\
\>>*0*\
\&#xNAN;*234*\
\>>0\
4\
\>>55555\
\>>0\
55555\
\>>0\
23

{% code title="참고 코드" %}

```python
# -*- coding: UTF-8 -*-
tong = []
while True:
    userInput = input('숫자를 입력해주세요!!! (0: 이전 값 출력, 998:전체 출력, 999: 종료) : ')
    if(not userInput.isnumeric()):
        print('숫자만 입력해주세요!!')
        continue
    userInput = int(userInput)
    if(userInput == 0):  
        if(not tong):
            print('데이터가 없습니다.')
            continue
        popValue = tong.pop()
        print(popValue)
    elif(userInput == 998):
        print(tong)
    elif(userInput == 999):
        print('종료합니다 !!')
        break;
    else:
        tong.append(userInput)
        print(tong[(len(tong)-1)])


```

{% endcode %}
