반응형

sqlalchemy는 파이썬에서 DB에 접근하기 위한 ORM 라이브러리다.

 

ORM은 Object Relational Mapping의 약어로써 객체(Object)와 관계형 DB(Relational)을 연결(Mapping) 해주는 것을 의미한다.

객체지향언어에서 객체(클래스)에 DB 테이블을 매핑시켜 사용한다고 생각하면 이해가 쉽다.

ORM은 설계에 따라 사용이 용이할 수도 어려워질 수가 있다.

 

* sqlalchemy

사이트 : https://www.sqlalchemy.org/

 

SQLAlchemy - The Database Toolkit for Python

The Python SQL Toolkit and Object Relational Mapper SQLAlchemy is the Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. It provides a full suite of well known enterprise-level persisten

www.sqlalchemy.org

지원하는 Databases : SQLite, Postresql, MySQL, Oracle, MS-SQL, Firebird, Sybase 등..

사용가능한 Python 버전 : 2.5이후 또는 3.x 버전

 

SQLAlchemy를 사용하기 위해 우선적으로 DB Engine을 생성해야 한다

from sqlalchemy import create_engine
#engine 생성
#password 특수문자 포함 시 password에 url 인코딩 필요
engine = create_engine("postgresql://{username}{password}@{host}/{database}")

#password 인코딩 예시
import urllib.parse
print(urllib.parse.quote_plus("kx@jj5/g")) #'kx%40jj5%2Fg' 출력

from sqlalchemy import URL
#URL을 이용한 engine생성
#password에 특수문자가 포함 시 인코딩 하지 않고 사용할 수 있음.
url_object = URL.create(
	drivername="",
    username={username},
    password={password},
    host={host},
    database={database},
    query={"charset":"cp949"}
    )
engine = create_engine(url_object)

위와 같이 생성한다.

 

* 각 DB별 engine 생성 샘플

# mysql default
engine = create_engine("mysql://scott:tiger@localhost/foo")

# mysqlclient (a maintained fork of MySQL-Python)
engine = create_engine("mysql+mysqldb://scott:tiger@localhost/foo")

# PyMySQL
engine = create_engine("mysql+pymysql://scott:tiger@localhost/foo")

#Oracle
engine = create_engine("oracle://scott:tiger@127.0.0.1:1521/sidname")
engine = create_engine("oracle+cx_oracle://scott:tiger@tnsname")

# mssql pyodbc
engine = create_engine("mssql+pyodbc://scott:tiger@mydsn")

# pymssql
engine = create_engine("mssql+pymssql://scott:tiger@hostname:port/dbname")

# sqlite://<nohostname>/<path>
# where <path> is relative:
engine = create_engine("sqlite:///foo.db")

# Unix/Mac - 4 initial slashes in total
engine = create_engine("sqlite:////absolute/path/to/foo.db")

# Windows
engine = create_engine("sqlite:///C:\\path\\to\\foo.db")

# Windows alternative using raw string
engine = create_engine(r"sqlite:///C:\path\to\foo.db")

참고 문서 : https://docs.sqlalchemy.org/en/20/core/engines.html#supported-databases

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[PYTHON] 파이썬 함수 매개변수  (0) 2022.08.11
[Python] flask_restful fields  (0) 2021.10.08
Single Linked list 구현  (0) 2018.03.22
창원시 버스 API 사용하기  (1) 2016.02.22
반응형

파이썬에서 사용하는 함수 매개변수 종류에 대해 작성

 

파이썬에서는 아래 5가지 종류의 함수 매개변수를 선언해서 사용할 수 있다.

1. default arguments

2. keyword arguments

3. positional arguments

4. arbitrary positional arguments

5. arbitrary keyword arguments

 

1. default arguments

  • 기본 매개변수는 함수가 정의되는 동안 제공된는 값이다.
  • "=" 기호를 사용해 매개변수의 기본값을 설정한다.
  • 기본 매개변수는 함수 호출 동안 선택적으로 사용된다.
  • 함수 호출 시 기본 매개변수에 값을 제공하면 기본 매개변수에 덮어 씌여진다.
  • 함수는 기본 매개변수를 원하는 만큼 가질 수 있다. (갯수 제한 없음)
  • 기본값 설정이 필수적이지 않다.

예시)

def add(a, b=5, c=10):
	return (a+b+c)

위 예시는 b,c가 기본 매개변수로 설정되어 있는 것을 보여준다.

아래 함수 호출 예시를 참고

print(add(3)) #return 18 a = 3, b = 5, c = 10
print(add(3,4)) #return 17 a = 3, b = 4, c = 10
print(add(2,3,4)) #return 9 a = 2, b = 3, c =4

 

2. Keyword Arguments

  • key = value 형식으로 사용하는 매개변수
  • 함수에 정의된 매개변수 순서를 따르지 않아도 값이 통과된다.
  • 키워드 매개변수는 함수에 정의 된 매개변수랑 일치해야한다.
  • 함수 호출시 사용되는 매개변수 타입 중 하나이다.

예시)

def add(a,b=5,c=10):
    return (a+b+c)

위와 같이 함수를 선언한다.

아래 예시와 같이 함수 호출시 매개변수를 key=value 로 사용하는 것을 keyword arguments 라 한다.

정의된 매개변수 순서를 지키지 않고 매개변수 키 값만 알맞게 설정하여 호출 가능하다.

print (add(b=10,c=15,a=20)) #return 45
print (add(a=10)) #return 25

 

3. Positional Arguments

  • 위치 매개변수 함수 호출 시 매개변수 위치에 값을 대입하여 호출하는 것을 의미한다.

예시)

def add(a,b,c):
    return (a+b+c)
    
print (add(10,20,30)) #return 60
print (add(10,c=30,b=20)) #return 60

위 첫번째 print 문과 같이 매개변수 위치에 값을 설정하여 호출 가능하다.

두번째 print 문처럼 keyword 매개변수와 섞어서 사용이 가능하다.

 

위 세가지 매개변수 사용에 대해 주의할 점!

 

#1. default 매개변수는 non-defualt 매개변수보다 앞에 선언할 수 없다.
def add(a=5,b,c):
    return (a+b+c)
#Output:SyntaxError: non-default argument follows default argument

#2. keyword 매개변수는 positional 매개변수보다 앞에 선언할 수 없다.
def add(a,b,c):
    return (a+b+c)
print (add(a=10,3,4))
#Output:SyntaxError: positional argument follows keyword argument

#3. 선언되지 않은 keyword 매개변수는 사용불가
def add(a,b,c):
    return (a+b+c)
print (add(a=10,b1=5,c=12))
#Output:TypeError: add() got an unexpected keyword argument 'b1'

#4. 중복된 keyword 매개변수 사용 불가
def add(a,b,c):
    return (a+b+c)
print (add(a=10,b=5,b=10,c=12))
#Output:SyntaxError: keyword argument repeated

 

4. arbitrary positional arguments

  • 매개변수 앞에 *를 사용하여 선언한 매개변수
  • 매개변수 선언을 가변적으로 설정할 때 사용한다.
  • 매개변수를 list 타입과 동일하게 사용

예시)

def add(*b):
    result=0
    for i in b:
         result=result+i
    return result

print (add(1,2,3,4,5)) #return 15
print (add(10,20)) #return 30

위 예시처럼 add 함수에 매개변수를 가변적으로 설정하여 호출이 가능하다

 

5. arbitrary keyword arguments

  • 매개변수 앞에 **를 사용하여 선언한 매개변수
  • 4번과 같이 매개변수를 가변적으로 설정할 수 있고 key:value 매개변수를 dictionary 타입과 동일하게 사용

예시)

def fn(**a):
    for i in a.items():
        print (i)
fn(numbers=5,colors="blue",fruits="apple")
'''
return
('numbers', 5)
('colors', 'blue')
('fruits', 'apple')
'''

 

참고 사이트 : https://levelup.gitconnected.com/5-types-of-arguments-in-python-function-definition-e0e2a2cafd29

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python]sqlalchemy 사용법  (0) 2022.12.07
[Python] flask_restful fields  (0) 2021.10.08
Single Linked list 구현  (0) 2018.03.22
창원시 버스 API 사용하기  (1) 2016.02.22
반응형

머신러닝 또는 딥러닝 시 고려해야 할 사항 중 데이터 전처리 내 Feature 선택에 대한 방법들

 

Feature란?

모델 학습 시 사용되는 입력 값. 즉 일반적으로 말하는 머신러닝 또는 딥러닝에서 사용되는 '독립변수들'이라고 보면 된다.

*이 글에서는 Feature라는 단어 대신 독립변수라는 단어를 사용.

 

학습시 어떤 독립변수를 사용할 지에 따라 학습 시간, 성능에 많은 영향을 끼친다.

크게 독립변수들은 숫자형과 문자형 두가지로 분류한다.

 

python3 pandas dataframe 예시 코드

import pandas as pd
sample = pd.read_csv(...) #샘플 데이터 파일을 읽는다.

print(sample.dtypes[sample.dtypes == "object"].index) #문자형 독립변수들
print(sample.dtypes[sample.dtypes != "object"].index) #숫자형 독립변수들
print(sample.info()) # 각 컬럼의 데이터 타입을 알 수 있다

 

변수 선택 방법을 통해 불필요한 독립변수들을 제거하는 방법

  1. wrapper방법 : 독립변수를 여러개의 하위집합으로 만들어 각각 모델을 학습 및 평가하여 가장 좋은 성능을 선택
    적용 예시 : https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
  2. filter방법 : 각 독립변수들과 종속변수에 대한 상관관계를 평가하여 선택 (지도학습에서 사용)

*종속변수는 학습시 사용되는 정답값

 

  • Feature Selection: Select a subset of input features from the dataset.
    • 비지도 학습 : 종속변수를 사용하지 않는다 (e.g. remove redundant variables).
      • 독립변수들 간의 상관관계를 이용하여 선택
    • 지도학습 : 종속변수를 사용한다. (e.g. remove irrelevant variables).
      • Wrapper: 독립변수들의 하위집합 중 성능이 좋을 것을 찾는다.
        • RFE
      • Filter: 종속변수와 독립변수의 관계를 기반하여 독립변수 하위 집합을 선택한다.
        • Statistical Methods
        • Feature Importance Methods
      • Intrinsic(Embedded): 학습 중 자동적으로 알고리즘으로 독립변수를 선택한다.
        • Decision Trees
        • Lasso
        • Redge
        • Elastic Net
  • Dimensionality Reduction: 입력데이터를 저차원 공간에 반영(?)
    Dimensionality Reduction의 경우 추가 공부하여 이후 다시 작성할 예정...

위 지도학습 내 Intrinsic(Embedded) 방법에 대해 다른 포스터에서 다시 작성할 예정

 

아래 사진은 독립변수들의 데이터 타입을 나타내는 사진 예시이다.

 

 

 

결론적으로 Feature selection에 대한 정답은 없다. 처음에는 휴리스틱하게 판단한 정보를 가지고 테스트를 하면서 점차적으로 성능을 끌어올리는게 현재까지는 최선의 방법인 것으로 판단된다.

 

참고 사이트 : https://machinelearningmastery.com/feature-selection-with-real-and-categorical-data/

반응형
반응형

머신 러닝 및 딥 러닝을 배우기 위해 kaggle 사이트에서 연습하며 개인 메모 용도로 작성

첫 과제로 일반적으로 많이 알려진 집값 예측 문제를 풀기로 하였다.

ML/DL 관련 강의는 몇개 수강하였지만 실질적으로 문제를 풀어본 적이 없어

해당 내용을 참고하여 배웠던 내용이랑 몰랐던 부분을 학습하는 목적으로 시작한다.

참고 URL : https://www.kaggle.com/munmun2004/house-prices-for-begginers#II.-EDA-&-FE-

 

[한글커널][House Prices]보스턴 집값 예측 for Begginers

Explore and run machine learning code with Kaggle Notebooks | Using data from House Prices - Advanced Regression Techniques

www.kaggle.com

 

머신러닝 또는 딥러닝은 아래 4단계로 진행한다.

1. 데이터 수집

2. 데이터 가공

3. 모델 학습

4. 예측 또는 분류

 

머신러닝 또는 딥러닝은 위 4단계로 진행이 되지만 프로젝트를 하기 위해서는 아래 순서로 생각하며 설계를 한다.

  1. 목적설정 (가설) : 어떤 일을 할 것인가
  2. 자료수집 : 선택한 일에 대해 어떤 학습을 할 것이며 필요한 데이터가 어떤것이 있는지 확인
  3. 모델 생성 : 수집된 데이터로 모델 생성
  4. 평가 : 생성된 모델을 사용하여 실제 적용
  5. 피드백

 

*** 개인 정리 ***

  • 이상치 제거 (극단값 제거) : 모델 학습에 성능 저하를 가져올 수 있는 데이터를 찾아 제거한다.
  • 다중공선성 문제 : 회귀분석에서 발생하는 문제. 특정 변수들 간의 상관관계가 높을 경우 발생. 회귀분석은 독립된 변수들 간에 변화를 학습하여 예측하는 모델이다. 특정 변수들의 상관도가 높으면 해당 변수의 변화값이 모델에 부정적 영향을 미치게 된다.
    참고 사이트 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=vnf3751&logNo=220833952857
  • 결측치 확인 및 처리 : 손실데이터 즉 값이 없는 데이터를 의미한다. 처리 방법은 데이터 케이스별 및 결측량에 따라 다르게 처리.
  • 수치(순서)형 데이터 : 연속 또는 이산형 데이터. 예) 키 / 몸무게 / 출생아 수 / 주가 등
  • 범주(명목)형 데이터 : 몇개의 범주로 나누어진 데이터. 예) 성별 / 혈액형 등

 

*** 분석 ***

 

Stacked Regressions : Top 4% on LeaderBoard

Explore and run machine learning code with Kaggle Notebooks | Using data from House Prices - Advanced Regression Techniques

www.kaggle.com

반응형
반응형

Azure web app service를 통해 Python Flask api 앱 배포 시 발생한 문제

웹 페이지에서 해당 api 첫 호출 시 Load 시간이 너무 오래 걸리는 문제가 있었다.

 

해당 원인에 대해 검색하여 찾아보니 Windows Azure 웹 사이트 또는 앱의 경우 설정 된 어느 정도의 시간 동안 호출이 없을 시

비활성 상태로 전환되어지며 해당 상태에서 호출 시 다시 리소스 할당 및 구성을 진행하기 때문에 첫 연결 시간이 엄청 오래 걸릴수 있다고 한다.

 

해당 현상 해결방법

1. Azure portal > 앱 서비스 > 설정 > 구성 > 일반 설정 > 항상 설정됨 (Always On) 설정

https://stackoverflow.com/questions/51391197/azure-web-app-very-slow-after-publish-or-restart

 

Azure web app very slow after publish or restart

When I publish or restart my web app it loads very slowly the first time, then when I refresh with F5 it is ok again. what could it be?

stackoverflow.com

2. 특정 시간 간격으로 해당 앱 서비스를 호출하는 배치를 만든다.

 

위 문제를 처음 직면했을 때 어떤 이유인지 몰라 앱 로직을 다시 확인하고 DB 연결 시간 또는 검색 시간 등 여러가지 원인을 파악했을 때 정확한 원인 파악이 안되었다. 구글 검색을 성능 문제가 아닌 첫 연결에 대한 검색으로 해결법을 찾을 수 있었다..ㅠㅠ

다시보면 별거 아니였지만 꽤 고생한 문제

반응형

'Azure' 카테고리의 다른 글

[Azure] Resource group could not be found  (0) 2021.05.18
반응형

Python Flask api 앱을 만드는 도중 marshal_with 와 fields 라이브러를 이용해

output 데이터 타입을 설정할 떄 찾은 팁 공유

 

아래와 같이 사용하면 특정한 타입으로 응답필드 값을 설정하여 사용할 수 있다.

from flask_restful import fields

class MyDateFormat(fields.Raw):
    def format(self, value):
        return value.strftime('%Y-%m-%d')

resource_fields = {
    'id': fields.Integer,
    'date': MyDateFormat
}

참조

https://stackoverflow.com/questions/65982519/custom-date-format-for-flask-restful-fields-datetime-for-marshal-with

 

Custom date format for flask_restful fields.DateTime for marshal_with

I am using flask_restful's fields and marshal_with to serialize my APIs output data. But I am having problems with my date format. I am storing the date as an SQLAlchemy DateTime type, for example,...

stackoverflow.com

https://flask-restplus.readthedocs.io/en/stable/marshalling.html

 

Response marshalling — Flask-RESTPlus 0.13.0 documentation

Response marshalling Flask-RESTPlus provides an easy way to control what data you actually render in your response or expect as in input payload. With the fields module, you can use whatever objects (ORM models/custom classes/etc.) you want in your resourc

flask-restplus.readthedocs.io

 

반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python]sqlalchemy 사용법  (0) 2022.12.07
[PYTHON] 파이썬 함수 매개변수  (0) 2022.08.11
Single Linked list 구현  (0) 2018.03.22
창원시 버스 API 사용하기  (1) 2016.02.22
반응형

문제 설명

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같이 특별한 방법으로 섞어 새로운 음식을 만듭니다.

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.
Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • scoville의 길이는 1 이상 1,000,000 이하입니다.
  • K는 0 이상 1,000,000,000 이하입니다.
  • scoville의 원소는 각각 0 이상 1,000,000 이하입니다.
  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.

입출력 예

scovilleKreturn

[1, 2, 3, 9, 10, 12] 7 2

입출력 예 설명

  1. 스코빌 지수가 1인 음식과 2인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 1 + (2 * 2) = 5
    가진 음식의 스코빌 지수 = [5, 3, 9, 10, 12]

  2. 스코빌 지수가 3인 음식과 5인 음식을 섞으면 음식의 스코빌 지수가 아래와 같이 됩니다.
    새로운 음식의 스코빌 지수 = 3 + (5 * 2) = 13
    가진 음식의 스코빌 지수 = [13, 9, 10, 12]

모든 음식의 스코빌 지수가 7 이상이 되었고 이때 섞은 횟수는 2회입니다.

 

import heapq
def solution(scoville, K):
    heap = []
    count = 0
    for i in scoville:
        heapq.heappush(heap,i)
    while heap:
        count += 1
        fstval = heapq.heappop(heap)
        scdval = heapq.heappop(heap)
        heapq.heappush(heap,fstval + scdval * 2)
        if heap[0] >= K:
            return count
        elif len(heap) == 1 and heap[0] < K:
            return -1
    return -1

 

 

반응형
반응형

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

입출력 예

pricesreturn

[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.

 

def solution(prices):
    answer = [0] * len(prices)
    for i in range(len(prices)-1):
        for k in range(i,len(prices)-1):
            if prices[i] > prices[k]:
                break
            else:
                answer[i] += 1
    return answer

 

시점의 가격과 시점 이후의 가격을 비교하면서 시간을 늘려주고 해당 시간을 정답 배열에 담는다.

반응형
반응형

문제 설명

선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.

예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.

위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다.

선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.

제한 조건

  • 스킬은 알파벳 대문자로 표기하며, 모든 문자열은 알파벳 대문자로만 이루어져 있습니다.
  • 스킬 순서와 스킬트리는 문자열로 표기합니다.
    • 예를 들어, C → B → D 라면 CBD로 표기합니다
  • 선행 스킬 순서 skill의 길이는 1 이상 26 이하이며, 스킬은 중복해 주어지지 않습니다.
  • skill_trees는 길이 1 이상 20 이하인 배열입니다.
  • skill_trees의 원소는 스킬을 나타내는 문자열입니다.
    • skill_trees의 원소는 길이가 2 이상 26 이하인 문자열이며, 스킬이 중복해 주어지지 않습니다.

입출력 예

skillskill_treesreturn

"CBD" ["BACDE", "CBADF", "AECB", "BDA"] 2

입출력 예 설명

  • BACDE: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트립니다.
  • CBADF: 가능한 스킬트리입니다.
  • AECB: 가능한 스킬트리입니다.
  • BDA: B 스킬을 배우기 전에 C 스킬을 먼저 배워야 합니다. 불가능한 스킬트리입니다.

 

def solution(skill, skill_trees):
    answer = 0
    al = list(skill)
    for a in skill_trees:
        bl = []
        for b in range(len(al)):
            if a.find(al[b]) == -1:
                bl.append(30)
            else:
                bl.append(a.find(al[b]))
        if sorted(bl) == bl:
            answer += 1
    return answer

 

문제 풀이

1. skill을 리스트에 담아서 각 스킬의 위치를 찾는다.

2. 만약 스킬이 없으면 스킬 길이의 제한값인 26보다 큰 수로 넣어준다.

3. 해당 스킬 순서의 배열이 정렬되어 있으면 가능한 스킬트리 정렬이 안되어 있으면 불가능한 스킬트리이다.

반응형
반응형

Python 2.7 Single Linked list 구현


참고자료 : starmooc.kr kaist 문일철 교수 데이터구조 및 분석 인강


class Node:

value = ''

nextnode = ''

binhead = False

bintail = False


def __init__(self, value='', nextnode='', binhead=False, bintail=False):

self.value = value

self.nextnode = nextnode

self.binhead = binhead

self.bintail = bintail

def getValue(self):

return self.value

def setValue(self, value=''):

self.value = value

def getNext(self):

return self.nextnode

def setNext(self, nextnode=''):

self.nextnode = nextnode

def isTail(self):

return self.bintail

def isHead(self):

return self.binhead




class SinglyLinkedlist:

nodehead = ''

nodetail = ''

size = 0


def __init__(self):

self.nodetail = Node(bintail = True)

self.nodehead = Node(binhead = True, nextnode = self.nodetail)

def insertAt(self, objInsert, idxInsert):

nodeNew = Node(value=objInser)

nodePrev = self.get(idxInsert - 1)

nodeNext = nodePrev.getNext()

nodePrev.setNext(nodeNew)

nodeNew.setNext(nodeNext)

self.size = self.size+1

def removeAt(self, idxRemove):

nodePrev = self.get(idxRemove - 1)

nodeRemove = nodePrev.getNext()

nodeNext = nodeRemove.getNext()

nodePrev.setNext(nodeNext)

self.size = self.size - 1

return nodeRemove.getValue()

def get(self, idxRetrieve):

nodeReturn = self.nodeHead

for itr in range(idxRetreve + 1):

nodeReturn = nodeReturn.getNext()

return nodeReturn

def printStatus(self):

nodeCurrent = self.nodehead

while nodeCurrent.getNext().isTail() == False:

nodeCurrent = nodeCurrent.getNext()

print nodeCurrent.getValue(),

print

def getSize(self)

return self.size


반응형

'프로그래밍 > Python' 카테고리의 다른 글

[Python]sqlalchemy 사용법  (0) 2022.12.07
[PYTHON] 파이썬 함수 매개변수  (0) 2022.08.11
[Python] flask_restful fields  (0) 2021.10.08
창원시 버스 API 사용하기  (1) 2016.02.22

+ Recent posts