python 자료형-숫자, 문자열, 리스트, 튜플, 딕셔너리, 집합, 불, 컨프리헨션

Yewon Choi·2020년 6월 25일
0

문제해결

목록 보기
2/9

📌 숫자형

사칙연산(+, -, *, /)
** 연산자 x의 y제곱
% 연산자 : 나눗셈 후 나머지를 반환
// 연산자 : 나눗셈 후 몫을 반환





📌 문자열

📝 문자열 만들고 사용

1. 문자열에 작은따옴표 (') 포함시키기

>>> food = "Python's favorite food is perl"

2. 문자열에 큰따옴표 (") 포함시키기

>>> say = '"Python is very easy." he says.'

📝 여러 줄인 문자열을 변수에 대입

연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용하기

>>> multiline='''
... Life is too short
... You need python
... '''

📝 문자열 연산하기

연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용하기

문자열 더해서 연결하기(Concatenation)

문자열 곱하기

문자열 길이 구하기

📝 문자열 인덱싱

>>> a = "Life is too short, You need Python"
>>> a[3]
'e'
>>> a[-1]
'n'
>>> a[0:4]
'Life'
>>> a[:17]
'Life is too short'  // 처음부터 끝 번호
>>> a[19:]
'You need Python'  // 시작 번호부터 그 문자열의 끝까지

"Pithon"이라는 문자열을 "Python"으로 바꾸려면?

>>> a = "Pithon"
>>> a[1]
'i'
>>> a[1] = 'y'

📝 문자열 포매팅

>>> "I eat %d apples." % 3
'I eat 3 apples.'

>>> number = 10
>>> day = "three"
>>> "I ate %d apples. so I was sick for %s days." % (number, day)
'I ate 10 apples. so I was sick for three days.'

>>> "Error is %d%%." % 98
'Error is 98%.'

포맷 코드와 숫자 함께 사용하기

>>> "%10s" % "hi"
'        hi'

>>> "%0.4f" % 3.42134234
'3.4213'

format 함수

>>> "I eat {0} apples".format(3)
'I eat 3 apples'

>>> y = 3.42134234
>>> "{0:0.4f}".format(y)
'3.4213'

f 문자열 포매팅

>>> name = '홍길동'
>>> age = 30
>>> f'나의 이름은 {name}입니다. 나이는 {age}입니다.'
'나의 이름은 홍길동입니다. 나이는 30입니다.'

📝 문자열 관련 함수들

문자열 뒤집기(reversed)

1. Reverse()를 이용하는 방법

revered를 이용해 문자열을 거꾸로 입력후 ”에 넣어출력합니다.

s = 'Reverse this strings'
print ''.join(reversed(s))

2. [::-1]

ex 1)

s = 'Reverse this strings'
s = [::-1]
print s



ex 2)
print'Reverse this strings'[::-1]

문자 개수 세기(count)

>>> a = "hobby"
>>> a.count('b')
2

위치 알려주기 1(find)

>>> a = "Python is the best choice"
>>> a.find('b')
14
>>> a.find('k')
-1

👉 문자열 중 문자 b가 처음으로 나온 위치를 반환
👉 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환

위치 알려주기2(index)

>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found

👉 find 함수와 다른 점? 문자열 안에 존재하지 않는 문자를 찾으면 오류가 발생한다

문자열 삽입(join)

>>> ",".join('abcd')
'a,b,c,d'


>>> ",".join(['a','b','c','d'])
'a,b,c,d'

소문자 / 대문자 를 대문자 / 소문자 로 바꾸기(upper / lower)

>>> a = "hi"
>>> a.upper()
'HI'


>>> a = "HI"
>>> a.lower()
'hi'

왼쪽 / 오른쪽 / 양쪽 공백 지우기(lstrip / rstrip / strip)

>>> a = " hi "
>>> a.lstrip()
'hi '


>>> a= " hi "
>>> a.rstrip()
' hi'


>>> a = " hi "
>>> a.strip()
'hi'

문자열 바꾸기(replace)

>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'

문자열 나누기(split)

>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> b = "a:b:c:d"
>>> b.split(':')
['a', 'b', 'c', 'd']





📌 리스트

📝 리스트 만들고 사용

리스트명 = [요소1, 요소2, 요소3, ...]

📝 리스트의 인덱싱과 슬라이싱

인덱싱

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]
>>> a[-1]
3

슬라이싱

>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]

중첩된 리스트에서 슬라이싱하기

>>> a = [1, 2, 3, ['a', 'b', 'c'], 4, 5]
>>> a[2:5]
[3, ['a', 'b', 'c'], 4]
>>> a[3][:2]
['a', 'b']

📝 리스트의 인덱싱과 슬라이싱

리스트 더하기(+)

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]

리스트 반복하기(*)

>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

리스트 길이구하기

>>> a = [1, 2, 3]
>>> len(a)
3

'3hi'

>>> a = [1, 2, 3]
>>>str(a[2]) + "hi"

숫자 3을 str 함수를 사용해서 문자 '3'으로 바꾸어 주어야 한다.

📝 리스트의 수정과 삭제

리스트에서 값 수정하기

>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]

del 함수 사용해 리스트 요소 삭제하기

>>> a = [1, 2, 3]
>>> del a[1]
>>> a
[1, 3]


>>> a = [1, 2, 3, 4, 5]
>>> del a[2:]
>>> a
[1, 2]

📝 리스트 관련 함수들

리스트에 요소 추가(append) a.append(4)

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

>>> a.append([5,6])
>>> a
[1, 2, 3, 4, [5, 6]]

리스트 정렬(sort) a.sort()

>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]


>>> a = ['a', 'c', 'b']
>>> a.sort()
>>> a
['a', 'b', 'c']

리스트 뒤집기(reverse) a.reverse()

>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']

위치 반환(index) a.index(3)

값이 있으면 위치 값 반환
값이 없으면 존재하지 않기 때문에 값 오류(ValueError)가 발생

>>> a = [1,2,3]
>>> a.index(3)
2
>>> a.index(1)
0

>>> a.index(0) //ValueError

리스트에 요소 삽입(insert) a.insert(0, 4)

insert(a, b)는 리스트의 a번째 위치에 b를 삽입

>>> a = [1, 2, 3]
>>> a.insert(0, 4)
>>> a
[4, 1, 2, 3]

>>> a.insert(3, 5)
>>> a
[4, 1, 2, 5, 3]

리스트 요소 제거(remove) a.remove(3) 값 삭제 (인덱스 x)

리스트에서 첫 번째로 나오는 x를 삭제

>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
>>> a
[1, 2, 1, 2, 3]

>>> a.remove(3)
>>> a
[1, 2, 1, 2]

리스트 요소 끄집어내기(pop) a.pop() pop(x)

pop() 맨 마지막 요소를 돌려주고 그 요소는 삭제

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

pop(x) x번째 요소를 돌려주고 그 요소는 삭제

>>> a = [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]

리스트에 포함된 요소 x의 개수 세기(count)

리스트 안에 x가 몇 개 있는지 조사하여 그 개수를 돌려줌

>>> a = [1,2,3,1]
>>> a.count(1)
2

리스트 확장(extend)

리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.
a.extend([4, 5])는 a += [4, 5]와 동일하다.

>>> a = [1,2,3]
>>> a.extend([4,5])
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]





📌 튜플

📝 튜플 vs 리스트

리스트와 거의 비슷하며 리스트와 다른 점은 다음과 같다.

  • 리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다.

👉 튜플은 값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일하다.





📌 딕셔너리

📝 딕셔너리 만들고 사용

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

>>> a = {1: 'hi'}

>>> a = { 'a': [1,2,3]}

📝 딕셔너리 쌍 추가, 삭제하기

딕셔너리 쌍 추가하기

딕셔너리 요소 삭제하기

📝 사용 방법

>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'

>>> a = {'a':1, 'b':2}
>>> a['a']
1
>>> a['b']
2

>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> dic['name']
'pey'
>>> dic['phone']
'0119993323'
>>> dic['birth']
'1118'

📝 딕셔너리 만들 때 주의할 사항

👿 1. 동일한 Key가 2개 존재할 경우 무시된다.

>>> a = {1:'a', 1:'b'}
>>> a
{1: 'b'}

👿 2. Key에 리스트는 쓸 수 없다

>>> a = {[1,2] : 'hi'}
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'

📝 딕셔너리 관련 함수들

Key 리스트 만들기(keys)

>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])

👿 리스트 고유의 append, insert, pop, remove, sort 함수는 수행할 수 없다.

>>> for k in a.keys():
...    print(k)
...
name
phone
birth

👉 dict_keys 객체를 리스트로 변환하려면 ?

>>> list(a.keys())
['name', 'phone', 'birth']

Value 리스트 만들기(values)

>>> a.values()
dict_values(['pey', '0119993323', '1118'])

Key, Value 쌍 얻기(items)

>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])

Key: Value 쌍 모두 지우기(clear)

>>> a.clear()
>>> a
{}

Key로 Value얻기 get -> a.get('name') get(x, '디폴트 값')

get vs 배열

공통점: 동일한 결괏값 반환됨

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a['name']
'pey'

차이점 : 존재하지 않는 키(nokey)로 값을 가져오려고 할 경우
get :
1) None은 "거짓"을 반환해줌
2) get(x, '디폴트 값') : 찾으려는 Key 값이 없을 경우 디폴트 값을 대신
배열 : KeyError

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}

get : 	1)
>>> print(a.get('nokey'))
None

get : 	2)
>>> a.get('foo', 'bar')
'bar'

배열 : KeyError
>>> print(a['nokey'])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'nokey'

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False





📌 집합

📝 집합 만들고 사용

>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}


>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}

📝 특징

1. 중복을 허용하지 않는다.

2. 순서가 없다(Unordered).

인덱싱으로 값을 얻을 수 없다.
set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한후 해야 한다.

>>> s1 = set([1,2,3])
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1)
>>> t1
(1, 2, 3)
>>> t1[0]
1

📝 교집합, 합집합, 차집합 구하기

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

1. 교집합 & intersection

>>> s1 & s2
{4, 5, 6}

>>> s1.intersection(s2)
{4, 5, 6}

2. 합집합 | union

>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}

3. 차집합 - difference

>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}

>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 9, 7}

📝 집합 자료형 관련 함수들

값 1개 추가하기(add)

값 여러 개 추가하기(update)

특정 값 제거하기(remove)

>>> s = set([1,2,3])

>>> s.add(4)

>>> s.update([5,6,7])

>>> s.remove(7)

>>> s
{1, 2, 3, 4, 5, 6}





📌 불

📝 불 자료형이란?

True - 참
False - 거짓

type(x) : x의 자료형을 확인하는 파이썬의 내장 함수 ex) type(a)

📝 불 연산

문자열 참 거짓을 식별

>>> bool('python')
True

>>> bool('')
False

배열 참 거짓을 식별

>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True





📌 자료형의 값 저장

📝 동일한 값인지 확인

>>> a = [1,2,3]
>>> b = a

>>> id(a)
4303029896
>>> id(b)
4303029896

👉 동일한 값

>>> a is b  # a와 b가 가리키는 객체는 동일한가?
True

📝 리스트를 복사 (다른 주소를 가리키도록)

1. [:] 이용

>>> a = [1, 2, 3]
>>> b = a[:]
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 2, 3]

2. copy 모듈 이용

>>> from copy import copy
>>> b = copy(a)

>>> b is a
False



📌 comprehension

📝 Comprehension이란

iterable한 오브젝트를 생성하기 위한 방법중 하나로 파이썬에서 사용할 수 있는 유용한 기능중 하나이다.

📝 종류

List Comprehension (LC)
Set Comprehension (SC)
Dict Comprehension (DC)
Generator Expression (GE)

Generator의 경우 comprehension과 형태는 동일하지만 특별히 expression이라고 부른다.

📝 List Comprehension (LC)

List comprehension은 리스트를 쉽게 생성하기 위한 방법이다.

# 20까지의 짝수를 출력하기 위해 다음과 같은 LC를 사용할 수 있다
evens = [x * 2 for x in range(11)]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# 리스트의 모든 원소값을 정규화 시킨 후 상수값을 더하는 LC
vals = [32, 12, 96, 42, 32, 93, 31, 23, 65, 43, 76]
amount = sum(vals)
norm_and_move = [(x / amount) + 1 for x in vals]
# [1.0587155963302752, 1.0220183486238532, 1.1761467889908257, 1.0770642201834861, 1.0587155963302752, 1.1706422018348623, 1.0568807339449542, 1.0422018348623854, 1.1192660550458715, 1.0788990825688074, 1.1394495412844037]

📝 Set Comprehension (SC)

{} : SC를 사용하면 중복값이 없는 집합을 얻을 수 있다

# 다음의 LC는 중복된 값들을 포함한다
no_primes = [j for i in range(2, 9) for j in range(i * 2, 50, i)]
# [4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 10, 15, 20, 25, 30, 35, 40, 45, 12, 18, 24, 30, 36, 42, 48, 14, 21, 28, 35, 42, 49, 16, 24, 32, 40, 48]

# SC를 사용하면 중복값이 없는 집합을 얻을 수 있다
no_primes = {j for i in range(2, 9) for j in range(i * 2, 50, i)}
# {4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 32, 33, 34, 35, 36, 38, 39, 40, 42, 44, 45, 46, 48, 49}

📝 Dict Comprehension (DC)

# 두 리스트를 하나의 dict로 합치는 DC. 하나는 key, 또 다른 하나는 value로 사용한다
subjects = ['math', 'history', 'english', 'computer engineering']
scores = [90, 80, 95, 100]
score_dict = {key: value for key, value in zip(subjects, scores)}
# {'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}

# 튜플 리스트를 dict 형태로 변환하는 DC
score_tuples = [('math', 90), ('history', 80), ('english', 95), ('computer engineering', 100)]
score_dict = {t[0]: t[1] for t in score_tuples}
# {'math': 90, 'history': 80, 'english': 95, 'computer engineering': 100}

📝 Generator Expression (GE)

# 다음 Generator는 제곱수를 만들어낸다
gen = (x**2 for x in range(10))
print(gen)
# <generator object <genexpr> at 0x105bde5c8>
print(next(gen)) # call 1
# 0
print(next(gen)) # call 2
# 1
# 'next' 함수 호출을 10번 반복
print(next(gen)) # call 10
# 81
print(next(gen)) # call 11
"""
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
"""

# Yes, it is an just generator. You can sum the yielding values.
# GE로 생성한 Generator도 yield를 가진 함수로 생성한 것과 동일한 Generator이기 때문에, 똑같이 sum을 사용할 수 있다. (iterable 객체)
gen = (x**2 for x in range(10))
sum_of_squares = sum(gen)
# 285



📌 포함(Containment) 연산자 in, not in

1. 문자열(strings)

########### in ###########

if 'p' in 'python':
    print(True)

else:
    print(False)
-------------------------
True


########### not in ###########

if 'k' not in 'python':
    print(True)
else:
    print(False)
-------------------------
True

2. 리스트(list) /

############## in ##############

if 'a' in ['a','b','c']:
    print(True)
else:
    print(False)
--------------------------------
True

############## not in ##############
if 'd' not in ['a','b','c']:
    print(True)
else:
    print(False)
--------------------------------
 True
 

3. 튜플(tuple)

############# in #############
if 'a' in ('a','b','c'):
	print(True)
else:
	print(False)
-------------------------
True

############# not in #############
if 'd' not in ('a','b','c'):
	print(True)
else:
	print(False)
-------------------------
True

4. 딕셔너리(Dictionary)

########### in ###########

if 'a' in {'a':1,'b':2}:
	print(True)
else:
	print(False)
---------------------------
True


########### not in ###########

if 'c' not in {'a':1,'b':2}:
	print(True)
else:
	print(False)
---------------------------
False



📌 람다 (lambda)

기본적 활용

lambda x: int(x)

문자열 변수를 정수형으로 변환.

lambda x,y: x>y

x, y 값을 비교.

lambda x: x['key']

딕셔너리에서 key를 이용해 value를 얻음.

다른 내장함수와의 활용

min, max

# min, max 함수
names = ['Suh', 'Adrian', 'Bill', 'Jonathan']

# longest : 길이가 가장 긴 이름
longest = max(names, key= lambda n: len(n))

print(longest)
# Jonathan

key 를 lambda n: len(n) 로 부여해 가장 길이가 긴 이름을 리턴한다.

sort, filter, map

keys = [{'key': 8}, {'key': 5}, {'key': 9}, {'key': 3}]
# sort 함수
keys.sort(key = lambda x: x['key'])
# [{'key': 3}, {'key': 5}, {'key': 8}, {'key': 9}]

👉 keys 리스트를 내부의 'key' 들의 value를 기준으로 정렬하였다.

# filter 함수
filter(lambda x: x['key']<5, keys)

👉 'key' 들의 value가 5보다 작은 요소들을 가져온다.

# map 함수
map(lambda x: x['key']+5, keys)

👉 모든 'key' 의 value에 5를 더한다.







🐥 출처 : https://wikidocs.net/book/1 점프 투 파이썬
좋은 자료 감사합니다 ..✨

comprehension
https://mingrammer.com/introduce-comprehension-of-python/

profile
https://github.com/devAon 찰나의 개발흔적을 남기는 개발블로그 입니다 🐥 https://aonee.tistory.com 에서 Velog로 블로그 이전 작업중입니다 ! 🎶

0개의 댓글