๐Ÿ–ฅ๏ธ[Python] 3-1. ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ

thisk336ยท2023๋…„ 5์›” 11์ผ
0

Python

๋ชฉ๋ก ๋ณด๊ธฐ
3/17
post-thumbnail

3. ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ (Sequential Data Types)

  • ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ๋ž€, ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์ˆซ์žํ˜• ๋ฐ์ดํ„ฐ์™€ ๋‹ฌ๋ฆฌ, ์—ฌ๋Ÿฌ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‹ค.
  • ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” ๋ฆฌ์ŠคํŠธ(List), ํŠœํ”Œ(Tuple), ๋ฌธ์ž์—ด(String)์ด ์žˆ๋‹ค. (๋ฌธ์ž์—ด์„ ๋ฌธ์ž๋“ค์˜ ๋‚˜์—ด๋กœ ์ธ์‹ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ์ด๋‹ค.)
  • ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ์ œํ•œ์€ ์—†๋‹ค. ํ•˜์ง€๋งŒ, ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์˜ ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ์ธ์ง€ํ•˜๋ฉฐ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…๋งˆ๋‹ค ํŠน์ง•์ด ๋‹ค๋ฅด๋‹ค. ๊ทธ ํŠน์ง•์„ ํŒŒ์•…ํ•˜์—ฌ ์šฉ๋„์— ๋งž๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

3.1 ๋ฆฌ์ŠคํŠธ(List)

  • ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด์ž, ๊ต‰์žฅํžˆ ์œ ์—ฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํŽธํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.
  • ํŒŒ์ด์ฌ์—์„œ [ ์™€ ]๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•œ๋‹ค. e.g. [1, 2, 3]
  • ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ, ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๋Š” ์•„๋ฌด ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฆฌ์ŠคํŠธ์กฐ์ฐจ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜๋ฉด ํŒŒ์ด์ฌ์—์„œ ๋‹ค๋ฃจ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๋ฐ์ดํ„ฐ๋Š” ์•„๋ฌด ๋ฌด๋ฆฌ์—†์ด ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ˆ˜์ •์ด ์ž์œ ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์ •์„ ํ•˜๋ฉด ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
L = [1, 2, 3]
L1 = []
L2 = list() # ๋นˆ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
L3 = [1, "Hi", 3.14, [1, 2, 3]] # ๋ฆฌ์ŠคํŠธ์—๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ํฌํ•จํ•œ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ์›์†Œ๋ฅผ ๋‹ค ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
L4 = [[1, 2],
      [3, 4]] # 2x2 ํ–‰๋ ฌ ํ‘œํ˜„์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ 2์ฐจ์› ๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

Indexing

  • ์—ฐ์†ํ˜• ๋ฐ์ดํ„ฐ๋“ค์€ ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.
  • ์ด๋ฅผ ์œ„ํ•ด indexing์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด ์žˆ๋‹ค. ๋ง๊ทธ๋Œ€๋กœ index๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ(access)ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • ๋ฆฌ์ŠคํŠธ์˜ index๋Š” ๋งจ ์•ž๋ถ€ํ„ฐ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, 1์”ฉ ์ฆ๊ฐ€ํ•˜๋Š” ์ •์ˆ˜ index๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

e.g. [1, 2, 3]์ด๋ฉด ์ฒซ๋ฒˆ์งธ ์›์†Œ๋Š” index๊ฐ€ 0์ด๊ณ , ๋‘๋ฒˆ์งธ ์›์†Œ๋Š” index๊ฐ€ 1์ด๋‹ค.

  • ํŒŒ์ด์ฌ์—์„œ๋Š” ์Œ์ˆ˜ index๋„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๋Š” ๋’ค์ชฝ๋ถ€ํ„ฐ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

e.g. [1, 2, 3]์ด๋ฉด ๋’ค์—์„œ ์ฒซ๋ฒˆ์งธ(๋งจ ๋งˆ์ง€๋ง‰)์›์†Œ๋Š” index๊ฐ€ -1์ด๊ณ , ๋’ค์—์„œ ๋‘๋ฒˆ์งธ ์›์†Œ๋Š” index๊ฐ€ -2์ด๋‹ค.

  • index๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•ด๋‹น ๋ณ€์ˆ˜์ด๋ฆ„์— []๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, []์•ˆ์— index๋ฅผ ๋„ฃ์–ด์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

e.g L = [1, 2, 3]์ด๋ฉด L[0]์€ 1์ด๊ณ , L[2]๋Š” L[-1]์ด๋ฉฐ 3์ด๋‹ค.

L = [1, 2, 3, 4, 5]
L[0] # L์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ
L[4] # L์˜ 5๋ฒˆ์งธ ์›์†Œ
L[-1] # L์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ

Slicing

์Šฌ๋ผ์ด์‹ฑ์€ ๋ฆฌ์ŠคํŠธ์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฆฌ์ŠคํŠธ์™€ ๋น„์Šทํ•œ ๊ตฌ์กฐ์ธ numpy array์™€ pandas series, dataframe์—์„œ๋„ ๋งŽ์ด ์ด์šฉ๋œ๋‹ค.

  • ์Šฌ๋ผ์ด์‹ฑ์€ ๋ฆฌ์ŠคํŠธ์˜ ์ผ๋ถ€๋ถ„๋งŒ ์ž˜๋ผ๋‚ธ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. (๋ง๊ทธ๋Œ€๋กœ ์Šฌ๋ผ์ด์‹ฑ)
  • ๋ฆฌ์ŠคํŠธ์˜ ์ผ๋ถ€๋งŒ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์“ฐ๋Š” ๊ธฐ๋ฒ•์ด๋ฉฐ, indexing์„ ๋ฒ”์œ„๋กœ ํ•˜๋Š” ๋Š๋‚Œ์ด๋‹ค.
  • ๋ฆฌ์ŠคํŠธ์˜ index์™€ :๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šฌ๋ผ์ด์‹ฑ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
L = [1, 2, 3, 4, 5]
L[0:3] # L์˜ ์ฒซ๋ฒˆ์งธ๋ถ€ํ„ฐ index2 ๊นŒ์ง€ ์ž๋ฅด๊ธฐ ## L[0], L[1], L[2]
L[1:5] # L์˜ ๋‘๋ฒˆ์งธ๋ถ€ํ„ฐ index4 ๊นŒ์ง€ ์ž๋ฅด๊ธฐ
L[:3] # ์‹œ์ž‘ index๋ฅผ ์ƒ๋žตํ•˜๋ฉด, ์ž๋™์œผ๋กœ index๋Š” 0์ด ๋œ๋‹ค. ## L[0], L[1], L[2]
L[1:] # ๋ index๋ฅผ ์ƒ๋žตํ•˜๋ฉด, ์ž๋™์œผ๋กœ index๋Š”(๋ฆฌ์ŠคํŠธ์˜ ๊ธธ์ด)๊ฐ€ ๋œ๋‹ค. ## L[1], L[2], L[3], L[4](= L[5-1] = L[len(L)-1] = L[-1])

๋ฆฌ์ŠคํŠธ ์—ฐ์‚ฐํ•˜๊ธฐ

# ๋ฆฌ์ŠคํŠธ ๋”ํ•˜๊ธฐ
L = [1, 2, 3]
L2 = [4, 5]
L + L2 # [1, 2, 3, 4, 5]
L2 + L # [4, 5, 1, 2, 3]

# ๋ฆฌ์ŠคํŠธ ๊ณฑํ•˜๊ธฐ
L * 3 # [1, 2, 3, 1, 2, 3, 1, 2, 3]

# ๋ฆฌ์ŠคํŠธ ์ˆ˜์ •ํ•˜๊ธฐ
L2[0] = 6 # L2์˜ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ 6์œผ๋กœ ๋ณ€๊ฒฝ.

๋ฆฌ์ŠคํŠธ ๊ด€๋ จ ํ•จ์ˆ˜

# ๋ฆฌ์ŠคํŠธ์— ์›์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ append(), insert()
L = []
L.append(1) # ์›ํ•˜๋Š” ์›์†Œ ์ถ”๊ฐ€ (์ˆœ์„œ๋Œ€๋กœ)
L.insert(2,3) # ์›ํ•˜๋Š” ์œ„์น˜์— ์›์†Œ ์ถ”๊ฐ€

# ๋ฆฌ์ŠคํŠธ ์›์†Œ ์ •๋ ฌํ•˜๊ธฐ sort()
L1 = [4, 3, 16]
L1.sort()
L1.sort(reverse=True) # ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ

# ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ(์ •๋ ฌ X) reverse()
L2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]
L2.reverse()
L2[::-1] # reverse()์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋Š” ๋ฐฉ๋ฒ•

# ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œ ์ œ๊ฑฐํ•˜๊ธฐ pop(), remove()
L2.remove(3) # ์ง€์šฐ๊ณ  ์‹ถ์€ ํŠน์ • ์›์†Œ 
L2.pop(3) # index์— ์žˆ๋Š” ์›์†Œ๋ฅผ ์ œ๊ฑฐ. ## ์•„๋ฌด๊ฒƒ๋„ ์“ฐ์ง€ ์•Š์œผ๋ฉด ๋’ค์—์„œ ๋ถ€ํ„ฐ ์ œ๊ฑฐ๋œ๋‹ค.

3.2 ํŠœํ”Œ(Tuple)

  • tuple์€ list๊ณผ ๊ฑฐ์˜ ๊ฐ™๋‹ค.

    indexing, slicing ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ์›์†Œ๋“ค๋„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • list์™€ ๋‹ค๋ฅธ ์  2๊ฐ€์ง€

1) ๋ฆฌ์ŠคํŠธ๋Š” []๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ํŠœํ”Œ์€ ()์„ ์‚ฌ์šฉํ•œ๋‹ค.

2) ๋ฆฌ์ŠคํŠธ๋Š” ์ƒ์„ฑ ํ›„์— ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๊ณ (mutable) ํŠœํ”Œ์€ ์ƒ์„ฑ ํ›„์— ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.(immutable)

t = ('a', 'b', ('a', 'b'))
t[0] = 3 # TypeError: 'tuple' object does not support item assignment (๋ณ€๊ฒฝ X)
len(t) # tuple์˜ ์›์†Œ ๊ฐœ์ˆ˜

0๊ฐœ์˜ ๋Œ“๊ธ€