파이썬 문법

BackEnd_Ash.log·2020년 8월 1일
2

파이썬

목록 보기
18/34

2020.08.01 내장함수 count , remove 추가
2020.08.03 내장함수 any 와 all 추가
2020.08.05 python string find() 추가

변수 와 global 변수

파이썬에서는 타입을 지정하지 않아도 된다.

number = 3
string = "jakdu"
# global 변수: 함수 밖에서 만들어진 변수, 
# 함수의 실행/종료와는 관계 없이 항상 존재하는 변수
global x = 10

반복문 & 리스트

for n in range( 0 , 10):
	print(n)

반복문 리스트

a = [1 , 2 , 3 , 4]
for i in a:
     print(i)

for 문에서 continue 로 코드 건너뛰기

for i in range(100):
	if i % 2 == 0:
    	    continue
    	print(i)

1
3
5
...(생략)
95
97
99

반복문 리스트 enumerate


a = [1 , 2 , 3 , 4]
for n , v in enumberate(a):
	print(n,v)

리스트에 요소 삽입 insert

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

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

리스트에 해당하는 요소 첫번째 삭제 remove

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

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

pop 은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.

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

리스트 요소 특정 요소 끄집어 내기 pop()

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

빈 리스트 확인하는 방법

권장하는 방법 )
if not x:
   print("List x is Empty")
   
권장하지 않는 방법 ) 
if not len(x):
   print("List x is Empty")

리스트 컴프리헨션

[(표현식) for (배열의 원소) in (배열)]

numbers2 = [x for x in range(1 , 10)]
print(numbers2)
[1, 2, 3, 4, 5, 6, 7, 8, 9]

리스트 컴프리헨션 조건달기

test_num3 = [x for x in range(1 , 10) if x % 2 ==0]
print(test_num3)
# [2, 4, 6, 8]
test_num3 = [x*2 for x in range(1, 10) if x %2 ==0]
print(test_num3)
# [4, 8, 12, 16]
cubes = [n **3 for n in range(1,10)]
print(cubes)
# [1, 8, 27, 64, 125, 216, 343, 512, 729]

이중 for문 컴프리헨션

for b in broad_list:
    for c in company_list:
        if b == c:
            duplicate_name.append(c)

이렇게 되어있는 것을
list comprehension 을 사용하게 되면

duplicate_name = []

[duplicate_name.append(c) for c in company_list for b in broad_list if b==c]

for else , while else

https://velog.io/@ash3767/python-for-else-while-else

딕셔너리

a = {1:'a', 2:'b'}
print(a[1]) # 'a'
print(a[2]) # 'b'

zip 함수 활용하기

z = zip(['a', 'b', 'c'], [1, 2, 3])
for i in z:
    print(i, end=' ') # ('a', 1) ('b', 2) ('c', 3) 

zip 을 사용하게 되면 이와 같이 튜플로 뱉어 내게 된다.
만약에 list 로 감싸게 된다면 ??

d = list(zip(['a', 'b', 'c'], [1, 2, 3]))
print(d)  # [('a', 1), ('b', 2), ('c', 3)]

zip 을 딕셔너리로 감쌀수도 있다.

d = dict(zip(['a', 'b', 'c'], (1, 2, 3)))
print(d)  # {'a': 1, 'b': 2, 'c': 3}

딕셔너리 수정

d = dict(a=1, b=2, c=3)
vo = d.items()  # 뷰 객체 얻음
for kv in vo:
    print(kv, end=' ')  # ('a', 1) ('b', 2) ('c', 3)

d['a'] += 3  # 딕셔너리 수정
d['c'] -= 2  # 딕셔너리 수정
for kv in vo:
    print(kv, end=' ')  # ('a', 4) ('b', 2) ('c', 1)

딕셔너리 컴프리헨션

리스트 컴프리헨션 뿐만 아니라 딕셔너리 컴프리헨션도 가능하다.

d1 = dict(a=1, b=2, c=3)
d2 = {k: v * 2 for k, v in d1.items()}
d3 = {k: v * 2 for k, v in d2.items()}
print(d1)  # {'a': 1, 'b': 2, 'c': 3}
print(d2)  # {'a': 2, 'b': 4, 'c': 6}
print(d3)  # {'a': 4, 'b': 8, 'c': 12}

리스트를 딕셔너리 컴프리 헨션으로

people = ["철수" , "영희" , "길동" , "순희"]
{ p : 0 for p in people } 
{'철수': 0, '영희': 0, '길동': 0, '순희': 0}

조건문 있는 딕셔너리 컴프리 헨션

scores = {'철수': 50, '영희': 80, '길동': 90, '순희': 60, '전학생': 100}
scores = { name: score for name, score in scores.items() if name != '전학생'}
print(scores)

if else 있는 딕셔너리 컴프리 헨션

grades = { name: 'PASS' if value > 70 else 'No-PASS' for name, value in scores.items()}
print(grades)

딕셔너리 순서정렬

pgm_lang = {

    "java": 20, 

    "javascript": 8, 

    "c": 7,  

    "r": 4, 

    "python": 28 } 
    
result1 = sorted(pgm_lang.keys())
print(result1)
# ['c', 'java', 'javascript', 'python', 'r']


result2 = sorted(pgm_lang.items())
print(result2)
# [('c', 7), ('java', 20), ('javascript', 8), ('python', 28), ('r', 4)]

순서정렬

오름차순 정렬

sort: 기본값이 오름차순으로 되어있습니다.

nums = [1, 10, 5, 7, 6]
nums.sort()
print(nums)
# [1, 5, 6, 7, 10]

num_list = [1,10,5,7,6]
num_list.sort(reverse = True) 
print(num_list) 
# [10 , 7 , 6 , 5 , 1]

reverse : 리스트 거꾸로

nums = [1 , 10 ,5 , 7 , 6 ]
nums.reverse()
print(nums)
# [6, 7, 5, 10, 1]

리스트 역순 정렬 sort(reverse=True)

nums = [1,10,5,7,6]
nums.sort()
print(nums)
# [1 ,5 ,6 ,7 ,10]

nums = [1,10,5,7,6]
nums.sort(reverse=True)
print(nums)
#[10 ,7 ,6 ,5 ,1]

파이썬 정렬시 특정 기준으로 정렬 sort(key = )

string = " my name is jakdu"
string = string.split()
print(string) # ['my', 'name', 'is', 'jakdu']
string.sort(key=len)
print(string) # ['my', 'is', 'name', 'jakdu']

튜플 패킹

튜플 패킹은 하나 이상의 값을 튜플로 묶는 행위 이다 .

tri_one = ( 12 , 15 )
print(tri_one) # ( 12 ,15 )

tri_two = 23 , 12 # 사실 튜플 패킹은 소괄호가 없어도 됨
print(tri_two) # ( 23 , 12 )

튜플 언패킹

튜플에 저장된 값을 꺼내는 행위를 튜플 언패킹이라고 한다.

tri_three = ( 12 , 25 )
bt , ht = tri_three
print(bt , ht) # 12 25

둘 이상의 값을 리스트로 묶어서 하나의 변수에 저장하는 것도 가능하다.

nums = (1, 2, 3, 4, 5)
first, *other, second = nums
print(first, other, second)  # 1 [2, 3, 4] 5

튜플이 아니라 리스트로 묶인다는것을 기억해야한다.
당연히 뒤나 앞을 묶을 수도 있다.

*first, other, second = nums
print(first, other, second)  # [1, 2, 3] 4 5
first, other, *second = nums
print(first, other, second)  # 1 2 [3, 4, 5]

언패킹은 튜플뿐만이 아니라 리스트에서도 동작을 한다 .

def ret_nums():
    return 1,2,3,4,5

n , *others = ret_nums() # 반환되는 값이 언패킹 되어 변수들에 저장
print(n) # 1 
print(others) # 리스트로 묶였다. [2,3,4,5]

슬라이싱

기본 사용법과 형태

num_list[start:end:step]

리스트에서도 인덱싱 기능 사용이 가능하며 , 슬라이싱은 나눈다는 의미를 가진다.
각각 start , end , step 모두 양수와 음수를 가질 수 있습니다.

  1. start : 슬라이싱을 시작할 시작위치입니다.
  2. end : 슬라이싱을 끝낼 위치로 end 는 포함하지 않는다.
  3. step : stride 라고도 하며 몇개씩 끊어서 가져올지를 정한다. ( 옵션)
s_list = [1, 2, 3, 4, 5]
print(s_list[1:4:1])
# [ 2 , 3 , 4 ]

a = [1,2,3,4,5]
print(a[2:4])
# 결과 값 : [3,4]

특정 시작위치부터 끝까지 가져오기

a[start:]

num_list = [1,2,3,4,5]
print(a[1:]) # [2,3,4,5]

num_list = [1,2,3,4,5]
print(a[-3:]) # [3,4,5]

시작점부터 특정 위치까지 모두 가져오기

a[:end]

num_list = [1,2,3,4,5]
print(num_list[:3]) # [1,2,3]
print(num_list[:-1] # [1,2,3,4]

특정위치부터 특정 위치까지 모두 가져오기

num_list = [1,2,3,4,5]
print(num_list[2:4]) # [3,4]
print(num_list[1:3]) # [2,3]

전체를 거꾸로 가져오기

num_list = [1,2,3,4,5]
# 전체를 거꾸로 가져옵니다.
print(a[::-1]) # [5,4,3,2,1]

*args 와 **kwags

*args

args 는 arguments 의 줄임말이다.

*args 는 키워드 되지 않은 가변 갯수의 인자들을 함수에 보낼때 사용한다.
굳이 꼭 args 라고 사용하지 않아도 되지만 , 저것으로 쓰자고 통용 되어있는것 같다.
jakdu 이렇게 적어도 사실 무방하긴 하다.

이 지시어는 여러 개 (복수개) 의 인자를 함수로 받고자 할때 쓰인다.

def func(*args):
    print(args)


func()  # ()
func(1)  # (1,)
func(1, 2)  # (1, 2)
func(1, 2, 3)  # (1, 2, 3)

def func(*args) 값들이 튜플로 묶여서 args 에 전달이 된다.
다른 예시를 좀 더 보겠습니다.

def test_var_args(f_arg, *argv):
    print("첫 번째 인자:", f_arg)  # 첫 번째 인자: 야숩
    for arg in argv:
        print("*argv의 다른 인자", arg)
        # *argv의 다른 인자 python
        # *argv의 다른 인자 달걀
        # *argv의 다른 인자 test


test_var_args('야숩', 'python', '달걀', 'test')

    
def who(a, b, c):
    print(a, b, c, sep=',')


d = dict(a=1, b=2, c=3)
who(*d)  # 이렇듯 *을 붙이면 키가 매개변수에 전달된다.
# a, b, c
who(**d)  # ** 을 붙이면 값이 매개변수에 전달된다.
# 1, 2 , 3

**kwargs

kwargs 는 keyword argument 의 줄임 말이다.

def func(**args):
    print(args)  # args 는 딕셔너리


func(a=1)  # {'a':1} 생성되어 args에 전달
func(a=1, b=2)  # {'a':1 , 'b':2} 생성되어 args 에 전달
func(a=1, b=2, c=3)  # {'a':1 ,'b':2,'c':3}


def greet_me(**kwargs):
    if kwargs is not None:
        for key, value in kwargs.items():
            print("%s == %s" % (key, value))  # python3: print("%s == %s" % (key, value))


greet_me(name="yasoob")

**kargs 는 (키워드 = 특정값) 형태로 함수를 호출할 수 있다.
그것은 그대로 딕셔너리 형태로 {"키워드" : "특정 값"}
이렇게 함수 내부로 전달이 된다.

*args **kwargs

매개변수 선언에 있어서 다음과 같이 *args 와 **kargs 를 동시에 둘 수있다.

def func(*args1, **args2):
    print(args1)  # args 은 튜플
    print(args2)  # args2 는 딕셔너리


print(func(1, a=1))
# (1,)
# {'a': 1}
print(func(1, 2, a=1, b=2))
# (1, 2)
# {'a': 1, 'b': 2}

순서

*args**kwargs 는 순서가 중요한데 ,

* 변수를 ** 변수보다 앞에 두어야 한다.

def name( username , *args , **kwargs):

그래야 python 에서 ** 변수를 어디부터 어디까지 담아야 할지를 인식한다.

3항연산자

def func(a):
    if a > 10:
        return "a > 10"
    else :
        return "a < 10"
    
# 3항 연산자

def func2(a):
    return "a가 10보다 크다" if a > 10 else "a가 10보다 작다."

파이썬 내장함수

count()

num_list = [1,1,2,2,2,3,3,4]
num_list.count(1) # 2
num_list.count(2) # 3
num_list.count(3) # 2
num_list.count(4) # 1

remove()

list의 remove메소드에 의한 삭제
list.remove(찾을아이템)
찾을 아이템이 없으면 ValueError 발생

num_list = [1,1,2,2,2,3,3,4]
num_list.remove(3)
print(num_list) # [1,1,2,2,2,3,4]

any


>>> any([False , False , False])
False

>>> any([False , True , False])
True

any 함수는 iteration 이 가능한 객체를 받아 그 항목을 돌면서 어느 하나라도 True 이면 결과로 True 를 리턴 한다는 것을 알 수있다.

여러 개 중에 어느 하나라도 참이면 참이다.

all


>>> all([False , True , False])
False

>>> all([True , True , True])
True

any 와는 반대로 Iteration 을 해서 그 내용이 모두 참이어야 참이다.

여러개 중에 모두 참이면 참

python String method ( 문자열 )

https://www.programiz.com/python-programming/methods/string/find

https://m.blog.naver.com/PostView.nhn?blogId=zlatmgpdjtiq&logNo=221302490913&proxyReferer=https:%2F%2Fwww.google.com%2F

python string find()

str = "abcabcabc"
index = str.find("b") # index 1 

변수 index 에는 1이 반환 됩니다.
변수 str 에 "abcabcabc" 문자 b 가 어디에 있는지 find 함수로 검색했습니다.
만약 지정한 문자를 찾지 못한 경우에는 -1 을 반환합니다.

검색 시작 위치 지정 예제

str = "abcabcabc"
index = str.find("b" , 2 ) # index 4

find 함수의 두 번째 파라미터는 시작 위치를 의미한다.
생략을 한다면 인덱스 0 부터 시작한다.

string.index()

>>> a = "happy"
>>> a.find('y')
4

>>> a = "happy"
>>> a.index('h')
0

문자열 체크

num='111'
fake='hundred'
hanguel='한글'


#isalpha 사용
print(num.isalpha()) # False
print(fake.isalpha()) # True
print(hanguel.isalpha()) # True

문자열 숫자 체크

num='111'
fake='hundred'
hanguel='한글'

#isdigit 사용
print(num.isdigit())
print(fake.isdigit())
print(hanguel.isdigit())

글자 또는 숫자로 구성 isalnum

글자 또는 숫자로 구성되어있으면 : True
아니면 False 값 반환

문장 전체에 대해서는 공백이 포함되어있기 때문에 False
숫자만 지정했을때에는 True
공백을 지정했을때에는 False
문자만 지정했을떼에는 True

string.startswith()

string.startswith() 는 괄호 안에 적은 문자열로 시작하는지를 확인합니다.

만약에 있다면 True
없다면 False 를 반환합니다.

string = "string jakdu"
print(string.startswith("string"))
# True


string_index = "string jakdu"
print(string_index.startswith("ing" , 2 , 5 )
# True

None variables


number =1 

print(number) # 1
print(type(number)) # <class 'int'>
print(number is None) # False
print(type(number) is int) # True

none_test = None

print(none_test) # None
print(type(none_test)) # <class 'NoneType'>
print(none_test is None) # True
print(type(none_test) is None) # False
profile
꾸준함이란 ... ?

0개의 댓글