TIL No.12: Python - List, Dictionary, Tuple, Regular Expression, Socket

BLAKE KIM·2020년 6월 30일
0
List
list()
len함수: 리스트 원소의 개수를 반환한다.
range함수: 0이상 입력한 수 미만의 범위의 리스트를 반환한다.
예)
friends = [‘Joseph’, ‘Glenn’, ’Sally’]
print(len(friends))			//3
print(range(len(friends)))	//[0, 1, 2]

문자열과 리스트의 관계
split(): 공백을 읽고 그것을 기준으로 쪼갠다.
예)
abc = ‘With three words’
stuff = abc.split()
print(stuff)		//[‘With’, ‘three’, ‘words’]

공백이 아닌 다른 것을 기준으로 구분할 수 있다.
예)
line = “first; second;third”
thing = line.split(‘;’)
print(thing)		//[‘first’, ‘second’, ‘third’]

Dictionary
dict()
list와 달리 순서가 없다.
key와 value로 이루어져 있다.

히스토그램
예)
counts = dict()
names = [‘csev’, ‘cwen’, ‘csev’, ‘zqian’, ‘cwen’]
for name in names:
	counts[name] = counts.get(name, 0) + 1
print(counts)		//{‘csev’:2, ‘zqian’:1, ‘cwen’:2}

dictionary 자체를 이용하는 경우
예)
counts = {‘chuck’:1, ‘fred’:42, ‘jan’:100}
for key in counts:
	print(key, counts[key])

jjj = {‘chuck’:1, ‘fred’:42, ‘jan’:100}
print(list(jjj))		//[‘jan’, ‘chuck’, ‘fred’]
print(jjj.keys())		//[‘jan’, ‘chuck’, ‘fred’]
print(jjj.values())	//[100, 1, 42]
print(jjj.items())	//[(‘jan’, 100), (‘chuck’, 1), (‘fred’, 42)]

반복문에서 items()를 쓰려면 반복 변수를 2개 써야한다.
예)
jjj = {‘chuck’:1, ‘fred’:42, ‘jan’:100}
for aaa, bbb in jjj.items():
	print(aaa, bbb)
//jan 100
//chuck 1
//fred 42

get() 함수 설명
dict.get(name, 0): dict라는 dictionary 안에 name을 key로 하는 값이 있다면 불러오고 없다면 name이라는 key에 0이라는 값을 집어넣는다.

Tuples
리스트와 다른 점은 수정 불가능하다는 점이다.
count(), index()
효율적이다.
튜플끼리 비교가 가능하다
(0, 1, 2) < (5, 1, 2)		//True
(0, 1, 20) < (0, 3, 4)		//True
왼쪽에서 오른쪽으로 비교한다. 같은 값이면 오른쪽으로 넘어간다. 문자열도 마찬가지다. 명확하게 답을 내릴 수 있을 때까지 넘어간다.

List comprehension

c = {‘a’:10, ‘b’:1, ‘c’:22}
tmp = list()
for k, v in c.items():
	tmp.append((v, k))

tmp = sorted(tmp)
print(tmp)	//[(1, ’b’), (10, ’a’), (22’, c’)]

>>>

c = {‘a’:10, ‘b’:1, ‘c’:22}
print(sorted([(v,k) for k, v in c.items()]))
//[(1, ’b’), (10, ’a’), (22’, c’)]

정규표현식
하나의 프로그래밍 언어로 스마트하게 검색해보자.
import re

요약
^: 라인의 처음을 매칭
$: 라인의 끝을 매칭
.: 임의의 문자를 매칭 (와일드 카드)
\s: 공백 문자를 매칭
\S: 공백이 아닌 문자를 매칭
*: 바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 표기함.
*?: 바로 앞선 문자에 적용되고 0 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
+: 바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 표기함
+?: 바로 앞선 문자에 적용되고 1 혹은 그 이상의 앞선 문자와 매칭을 탐욕적이지 않은 방식으로 표기함.
[aeiou]: 명세된 집합 문자에 존재하는 단일 문자와 매칭. “a”, “e”, “i”, “o”, “u” 문자만 매칭되는 예제
[a-z0-9]: - 기호로 문자 범위를 명세할 수 있다. 소문자이거나 숫자인 단일 문자만 매칭되는 예제.
( ): 괄호가 정규표현식에 추가될 때, 매칭을 무시한다. 하지만 findall()을 사용 할 때 전체 문자열보다 매칭된 문자열의 상세한 부속 문자열을 추출할 수 있게 한다.

search(a, b): b에서 a를 가진 것을 찾는다.
findall(): 주어진 패턴을 만족하는 문자열들의 리스트를 준다. 조건을 만족하는 문자열이 두 개 이상이라면 더 긴 것을 선택한다. ?를 넣으면 탐욕적이지 않은 값을 선택한다.

소켓만들기

import socket
//socket 모듈을 import

mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
//인터넷에 연결되는 소켓을 연속된 문자의 흐름인 스트림 방식으로 만들어줍니다.

mysock.connect( ('data.pr4e.org', 80) )
//그 소켓에 data.pr4e.org라는 호스트에 80이라는 포트로 연결
profile
BackEnd

0개의 댓글