ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1.8. Getting Started with Data
    번역/Problem Solving with Algorithms and Data 2017. 10. 8. 21:15
    반응형

    이 문서는 영문으로된 내용을 구글 번역기를 활용하여 번역한 내용입니다. 
    개인적인 공부 및 추후 다시 볼 수 있도록 하기 위해 개인 블로그에 번역 내용을 옮겨 놓았습니다.
    원문과 내용이 다를시 책임지지 않으며, 저작권 문제가 발생시 언제든 삭제 될 수 있습니다. 


    Problem Solving with Algorithms and Data Structures using Python by Bradley N. Miller, David L. Ranum is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License


    위에서 파이썬은 객체 지향 프로그래밍 패러다임을 지원합니다. 즉, 파이썬은 데이터를 문제 해결 프로세스의 중심점으로 간주합니다. 파이썬과 다른 객체 지향 프로그래밍 언어에서 클래스는 데이터가 어떻게 보이는지 (상태)와 데이터가 할 수있는 것 (동작)에 대한 설명이되도록 정의합니다. 클래스의 사용자는 데이터 항목의 상태와 동작 만 볼 수 있기 때문에 클래스는 추상 데이터 유형과 유사합니다. 데이터 항목은 객체 지향 패러다임에서 객체라고 부릅니다. 객체는 클래스의 인스턴스입니다.

    1.8.1. Built-in Atomic Data Types
    원자 데이터 유형을 고려하여 검토를 시작합니다. 파이썬에는 정수 및 부동 소수점 데이터 유형을 구현하는 두 가지 기본 내장 숫자 클래스가 있습니다. 이러한 Python 클래스는 int 및 float라고합니다. 표준 산술 연산 인 +, -, *, / 및 ** (지수)는 괄호와 함께 사용하여 일반적인 연산자 우선 순위에서 벗어나 연산 순서를 지정할 수 있습니다. 다른 매우 유용한 연산은 나머지 (모듈러) 연산자 %와 정수 나누기 //입니다. 두 개의 정수가 나뉘어 질 때 결과는 부동 소수점입니다. 정수 나누기 연산자는 소수 부분을 잘라내어 몫의 정수 부분을 반환합니다.

    파이썬 bool 클래스로 구현 된 부울 데이터 유형은 진리 값을 표현하는 데 매우 유용합니다. 부울 객체의 가능한 상태 값은 표준 부울 연산자 인 and, or 및 not와 함께 True 및 False입니다.

    >>> True
    True
    >>> False
    False
    >>> False or True
    True
    >>> not (False or True)
    False
    >>> True and True
    True

    부울 데이터 객체는 항등 (==) 및보다 큼 (>>)과 같은 비교 연산자의 결과로도 사용됩니다. 또한 관계 연산자와 논리 연산자를 결합하여 복잡한 논리적 질문을 형성 할 수 있습니다. 표 1은 관계 세션과 논리 연산자를 보여줍니다.
    Operation NameOperatorExplanation
    less than<<Less than operator
    greater than>>Greater than operator
    less than or equal<=<=Less than or equal to operator
    greater than or equal>=>=Greater than or equal to operator
    equal====Equality operator
    not equal!=!=Not equal operator
    logical andandandBoth operands True for result to be True
    logical orororOne or the other operand is True for the result to be True
    logical notnotnotNegates the truth value, False becomes True, True becomes False

    식별자는 프로그래밍 언어에서 이름으로 사용됩니다. 파이썬에서 식별자는 문자 또는 밑줄 (_)로 시작하며 대소 문자를 구분하며 길이는 제한 될 수 없습니다. 의미를 전달하는 이름을 사용하면 프로그램 코드를 읽고 이해하기가 더 쉽습니다.

    파이썬 변수는 이름이 할당 문 왼쪽에서 처음 사용될 때 만들어집니다. 할당 문은 이름과 값을 연결하는 방법을 제공합니다. 변수는 데이터 그 자체가 아닌 데이터에 대한 참조를 보유합니다. 다음 세션을 고려하십시오.

    >>> theSum = 0
    >>> theSum
    0
    >>> theSum = theSum + 1
    >>> theSum
    1
    >>> theSum = True
    >>> theSum
    True

    할당 문 theSum = 0theSum이라는 변수를 생성하고 데이터 객체 0에 대한 참조를 보유하게합니다 (그림 3 참조). 일반적으로 할당 문의 오른쪽이 평가되고 결과 데이터 객체에 대한 참조가 왼쪽에있는 이름에 "할당"됩니다. 예제에서이 시점에서 변수의 유형은 정수이며 현재 theSum에 의해 참조되는 데이터의 유형입니다. 부울 값 True로 표시된 것처럼 데이터 유형이 변경되면 (그림 4 참조) 변수의 유형도 변경됩니다 (theSum은 이제 부울 유형입니다). 할당 문은 변수가 보유하고있는 참조를 변경합니다. 이것은 파이썬의 동적 특성입니다. 동일한 변수는 많은 다른 유형의 데이터를 나타낼 수 있습니다.


    1.8.2. Built-in Collection Data Types
    numeric 클래스와 boolean 클래스 외에도 Python에는 매우 강력한 내장 콜렉션 클래스가 많이 있습니다. 목록, 문자열 및 튜플은 일반적인 구조는 매우 유사하지만 올바르게 사용하려면 이해해야하는 구체적인 차이점이있는 순서가 지정된 컬렉션입니다. 집합과 사전은 정렬되지 않은 모음입니다.

    리스트는 파이썬 데이터 객체에 대한 0 개 이상의 참조 된 순서가 지정된 콜렉션입니다. 목록은 대괄호로 묶인 쉼표로 구분 된 값으로 작성됩니다. 빈 목록은 단순히 [ ]입니다. 목록은 이질적입니다. 즉, 데이터 객체가 모두 같은 클래스의 것이 아니어도되며 컬렉션을 아래처럼 변수에 할당 할 수 있습니다. 다음 단편은 목록에있는 다양한 Python 데이터 객체를 보여줍니다.

    >>> [1,3,True,6.5]
    [1, 3, True, 6.5]
    >>> myList = [1,3,True,6.5]
    >>> myList
    [1, 3, True, 6.5]

    파이썬이리스트를 평가할 때,리스트 자체가 리턴됨에 유의하십시오. 그러나 나중에 처리 할 수 있도록 목록을 기억하려면 해당 참조를 변수에 할당해야합니다.

    목록은 순차적으로 정렬 된 것으로 간주되므로 모든 Python 시퀀스에 적용 할 수있는 많은 연산을 지원합니다. 표 2에서는 이러한 작업을 검토하고 다음 세션에서는 해당 작업의 사용 예를 제공합니다.
    Operation NameOperatorExplanation
    indexing[ ]Access an element of a sequence
    concatenation+Combine sequences together
    repetition*Concatenate a repeated number of times
    membershipinAsk whether an item is in a sequence
    lengthlenAsk the number of items in the sequence
    slicing[ : ]Extract a part of a sequence

    목록 (시퀀스)에 대한 인덱스는 0부터 계산되기 시작합니다. 슬라이스 작업 myList [1 : 3]은 1로 인덱싱 된 항목부터 시작하여 3으로 인덱싱 된 항목을 포함하지 않는 항목 목록을 반환합니다.

    경우에 따라 목록을 초기화해야 할 수도 있습니다. 이는 반복을 사용하여 신속하게 수행 할 수 있습니다. 예를 들어,

    >>> myList = [0] * 6
    >>> myList
    [0, 0, 0, 0, 0, 0]

    반복 연산자와 관련하여 매우 중요한 점은 시퀀스의 데이터 객체에 대한 참조가 반복된다는 것입니다. 이것은 다음 세션을 고려하여 가장 잘 볼 수 있습니다.

    변수 AmyList라는 원래 목록에 대한 세 개의 참조 집합을 보유합니다. myList의 한 요소에 대한 변경 사항은 A에서 세 번 발생하는 모든 항목에서 나타납니다.

    목록은 데이터 구조를 작성하는 데 사용될 여러 가지 메소드를 지원합니다. 표 3은 요약을 제공합니다. 그 사용 예가 다음과 같습니다.
    Method NameUseExplanation
    appendalist.append(item)Adds a new item to the end of a list
    insertalist.insert(i,item)Inserts an item at the ith position in a list
    popalist.pop()Removes and returns the last item in a list
    popalist.pop(i)Removes and returns the ith item in a list
    sortalist.sort()Modifies a list to be sorted
    reversealist.reverse()Modifies a list to be in reverse order
    deldel alist[i]Deletes the item in the ith position
    indexalist.index(item)Returns the index of the first occurrence of item
    countalist.count(item)Returns the number of occurrences of item
    removealist.remove(item)Removes the first occurrence of item

    pop과 같은 메서드 중 일부가 값을 반환하고 목록을 수정하는 것을 볼 수 있습니다. reverse와 같은 다른 것들은 반환 값없이 목록을 수정하기 만하면됩니다. pop은 목록의 끝을 기본값으로하지만 특정 항목을 제거하고 반환 할 수도 있습니다. 이러한 메소드에는 0부터 시작하는 인덱스 범위가 다시 사용됩니다. 또한 메소드 호출을 요구하는 익숙한 "점"표기법을 알아야합니다.
    myList.append(False)는 "myList 객체에 append 메소드를 수행하여 False 값을 보내도록 요청하십시오."라고 읽을 수 있습니다. 정수와 같은 간단한 데이터 객체조차도 이러한 방식으로 메소드를 호출 할 수 있습니다.

    >>> (54).__add__(21)
    75
    >>>

    이 조각에서 정수 객체 54add 메소드 (파이썬에서 __add__라고 함)를 실행하고 추가 할 값으로 21을 전달하도록 요청합니다. 결과는 합계 75입니다. 물론 우리는 이것을 54+21로 작성합니다. 이 섹션의 뒷부분에서 이 메소드에 대해 더 자세히 설명 할 것입니다.

    리스트와 함께 자주 논의되는 일반적인 파이썬 함수 중 하나는 range 함수입니다. range는 일련의 값을 나타내는 범위 객체를 생성합니다. list 함수를 사용하면 범위 객체의 값을 목록으로 볼 수 있습니다. 아래에 그 예가 나와 있습니다.

    >>> range(10)
    range(0, 10)
    >>> list(range(10))
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(5,10)
    range(5, 10)
    >>> list(range(5,10))
    [5, 6, 7, 8, 9]
    >>> list(range(5,10,2))
    [5, 7, 9]
    >>> list(range(10,1,-1))
    [10, 9, 8, 7, 6, 5, 4, 3, 2]
    >>>

    range 객체는 정수 시퀀스를 나타냅니다. 기본적으로 0으로 시작합니다. 더 많은 매개 변수를 제공하면 특정 지점에서 시작하고 끝나며 항목을 건너 뛸 수 있습니다. 첫 번째 예인 range(10)에서 sequence는 0부터 시작하여 10까지는 포함하지 않습니다. 두 번째 예에서 range(5,10)는 5에서 시작하여 10을 포함하지 않습니다. range(5,10,2)는 비슷하게 수행되지만 두 개 건너 뜁니다 (다시 10은 포함되지 않음).

    Strings은 0 개 이상의 문자, 숫자 및 기타 기호의 순차 모음입니다. 우리는 이러한 문자, 숫자 및 기타 기호 문자를 호출합니다. 리터럴 문자열 값은 따옴표 (단일 또는 이중)를 사용하여 식별자와 구별됩니다.

    >>> "David"
    'David'
    >>> myName = "David"
    >>> myName[3]
    'i'
    >>> myName*2
    'DavidDavid'
    >>> len(myName)
    5
    >>>

    문자열은 시퀀스이므로 위에서 설명한 모든 시퀀스 작업은 예상대로 작동합니다. 또한 문자열에는 여러 가지 방법이 있으며 그 중 일부는 표 4에 나와 있습니다. 예를 들어,

    >>> myName
    'David'
    >>> myName.upper()
    'DAVID'
    >>> myName.center(10)
    '  David   '
    >>> myName.find('v')
    2
    >>> myName.split('v')
    ['Da', 'id']

    이 중 split은 데이터 처리에 매우 유용합니다. split은 문자열을 취하여 분할 문자를 분할 점으로 사용하여 문자열 목록을 반환합니다. 이 예에서 v는 나누기 지점입니다. 나눗셈이 지정되지 않으면 split 메소드는 탭, 줄 바꿈 및 공백과 같은 공백 문자를 찾습니다.
    Method NameUseExplanation
    centerastring.center(w)Returns a string centered in a field of size w
    countastring.count(item)Returns the number of occurrences of item in the string
    ljustastring.ljust(w)Returns a string left-justified in a field of size w
    lowerastring.lower()Returns a string in all lowercase
    rjustastring.rjust(w)Returns a string right-justified in a field of size w
    findastring.find(item)Returns the index of the first occurrence of item
    splitastring.split(schar)Splits a string into substrings at schar

    목록과 문자열 간의 주요 차이점은 문자열은 수정할 수없는 반면 목록은 수정할 수 있다는 것입니다. 이를 가변성이라고합니다. 목록은 변경 가능합니다. 문자열은 변경 불가능합니다. 예를 들어, 인덱싱 및 할당을 사용하여 목록의 항목을 변경할 수 있습니다. 문자열은 변경이 허용되지 않습니다.

    >>> myList
    [1, 3, True, 6.5]
    >>> myList[0]=2**10
    >>> myList
    [1024, 3, True, 6.5]
    >>>
    >>> myName
    'David'
    >>> myName[0]='X'

    Traceback (most recent call last):
      File "<pyshell#84>", line 1, in -toplevel-
        myName[0]='X'
    TypeError: object doesn't support item assignment
    >>>

    튜플은 이기종 데이터 시퀀스라는 점에서 목록과 매우 유사합니다. 차이점은 튜플은 문자열과 같이 불변이라는 것입니다. 튜플은 변경할 수 없습니다. 튜플은 괄호 안에 쉼표로 구분 된 값으로 작성됩니다. 시퀀스로서, 위에서 설명한 모든 작업을 사용할 수 있습니다. 예를 들어,

    >>> myTuple = (2,True,4.96)
    >>> myTuple
    (2, True, 4.96)
    >>> len(myTuple)
    3
    >>> myTuple[0]
    2
    >>> myTuple * 3
    (2, True, 4.96, 2, True, 4.96, 2, True, 4.96)
    >>> myTuple[0:2]
    (2, True)
    >>>

    그러나 튜플의 항목을 변경하려고하면 오류가 발생합니다. 오류 메시지는 문제의 위치 및 이유를 제공합니다.

    >>> myTuple[1]=False

    Traceback (most recent call last):
      File "<pyshell#137>", line 1, in -toplevel-
        myTuple[1]=False
    TypeError: object doesn't support item assignment
    >>>

    집합은 0 개 이상의 불변의 파이썬 데이터 객체의 순서가없는 콜렉션입니다. 집합은 중복을 허용하지 않고 중괄호로 묶인 쉼표로 구분 된 값으로 작성됩니다. 빈 세트는 set()에 의해 표현됩니다. 집합은 이기종이며, 콜렉션은 아래와 같이 변수에 할당 될 수 있습니다.

    >>> {3,6,"cat",4.5,False}
    {False, 4.5, 3, 6, 'cat'}
    >>> mySet = {3,6,"cat",4.5,False}
    >>> mySet
    {False, 4.5, 3, 6, 'cat'}
    >>>

    집합은 순차적이라고 간주되지 않지만 이전에 제시된 익숙한 작업 중 일부를 지원합니다. 표 5에서는 이러한 작업을 검토하고 다음 세션에서는 해당 작업의 사용 예를 제공합니다.
    Operation NameOperatorExplanation
    membershipinSet membership
    lengthlenReturns the cardinality of the set
    |aset | othersetReturns a new set with all elements from both sets
    &aset & othersetReturns a new set with only those elements common to both sets
    -aset - othersetReturns a new set with all items from the first set not in second
    <=aset <= othersetAsks whether all elements of the first set are in the second

    >>> mySet
    {False, 4.5, 3, 6, 'cat'}
    >>> len(mySet)
    5
    >>> False in mySet
    True
    >>> "dog" in mySet
    False
    >>>

    세트는 수학 환경에서 작업 한 사람들에게 친숙해야 할 여러 가지 방법을 지원합니다. 표 6은 요약을 제공합니다. 그 사용 예가 다음과 같습니다. union, intersection, issubset 및 difference에는 모두 연산자를 사용할 수 있습니다.
    Method NameUseExplanation
    unionaset.union(otherset)Returns a new set with all elements from both sets
    intersectionaset.intersection(otherset)Returns a new set with only those elements common to both sets
    differenceaset.difference(otherset)Returns a new set with all items from first set not in second
    issubsetaset.issubset(otherset)Asks whether all elements of one set are in the other
    addaset.add(item)Adds item to the set
    removeaset.remove(item)Removes item from the set
    popaset.pop()Removes an arbitrary element from the set
    clearaset.clear()Removes all elements from the set

    >>> mySet
    {False, 4.5, 3, 6, 'cat'}
    >>> yourSet = {99,3,100}
    >>> mySet.union(yourSet)
    {False, 4.5, 3, 100, 6, 'cat', 99}
    >>> mySet | yourSet
    {False, 4.5, 3, 100, 6, 'cat', 99}
    >>> mySet.intersection(yourSet)
    {3}
    >>> mySet & yourSet
    {3}
    >>> mySet.difference(yourSet)
    {False, 4.5, 6, 'cat'}
    >>> mySet - yourSet
    {False, 4.5, 6, 'cat'}
    >>> {3,100}.issubset(yourSet)
    True
    >>> {3,100}<=yourSet
    True
    >>> mySet.add("house")
    >>> mySet
    {False, 4.5, 3, 6, 'house', 'cat'}
    >>> mySet.remove(4.5)
    >>> mySet
    {False, 3, 6, 'house', 'cat'}
    >>> mySet.pop()
    False
    >>> mySet
    {3, 6, 'house', 'cat'}
    >>> mySet.clear()
    >>> mySet
    set()
    >>>

    최종 파이썬 컬렉션은 사전(dictionary)이라고 불리는 순서가없는 구조입니다. 사전은 연결된 쌍의 항목 모음으로, 각 쌍은 키와 값으로 구성됩니다. 이 키 - 값 쌍은 일반적으로 key : value로 작성됩니다. 사전은 중괄호로 묶인 쉼표로 구분 된 키 : 값 쌍으로 작성됩니다. 예를 들어,

    >>> capitals = {'Iowa':'DesMoines','Wisconsin':'Madison'}
    >>> capitals
    {'Wisconsin': 'Madison', 'Iowa': 'DesMoines'}
    >>>

    키를 통해 값에 액세스하거나 다른 키 - 값 쌍을 추가하여 사전을 조작 할 수 있습니다. 액세스 구문은 시퀀스 액세스와 비슷하지만 키 값을 사용하는 항목의 인덱스를 사용하는 대신. 새 값을 추가하는 것은 비슷합니다.

    사전은 키와 관련하여 특별한 순서없이 유지된다는 점에 유의해야합니다. 추가 된 첫 번째 쌍 ('Utah': 'SaltLakeCity')은 사전에 첫 번째 쌍이 추가되고 두 번째 쌍이 추가되었습니다 ('California': 'Sacramento')가 마지막에 배치되었습니다. 키 배치는 "해싱"개념에 따라 다르며, 자세한 내용은 4 장에서 설명합니다. length 함수는 이전 컬렉션과 동일한 역할을 수행합니다.

    사전에는 메소드와 연산자가 모두 있습니다. 표 7과 표 8에서 설명하고 세션에서는 실제 상황을 보여줍니다. keys, values 및 items 메서드는 모두 해당 값이 들어있는 객체를 반환합니다. list 기능을 사용하여 목록으로 변환 할 수 있습니다. get 메소드에는 두 가지 변형이 있음을 알 수 있습니다. 키가 사전에 없으면 getNone을 반환합니다. 그러나 두 번째 선택적 매개 변수는 대신 반환 값을 지정할 수 있습니다.
    OperatorUseExplanation
    []myDict[k]Returns the value associated with k, otherwise its an error
    inkey in adictReturns True if key is in the dictionary, False otherwise
    deldel adict[key]Removes the entry from the dictionary

    >>> phoneext={'david':1410,'brad':1137}
    >>> phoneext
    {'brad': 1137, 'david': 1410}
    >>> phoneext.keys()
    dict_keys(['brad', 'david'])
    >>> list(phoneext.keys())
    ['brad', 'david']
    >>> phoneext.values()
    dict_values([1137, 1410])
    >>> list(phoneext.values())
    [1137, 1410]
    >>> phoneext.items()
    dict_items([('brad', 1137), ('david', 1410)])
    >>> list(phoneext.items())
    [('brad', 1137), ('david', 1410)]
    >>> phoneext.get("kent")
    >>> phoneext.get("kent","NO ENTRY")
    'NO ENTRY'
    >>>

    Method NameUseExplanation
    keysadict.keys()Returns the keys of the dictionary in a dict_keys object
    valuesadict.values()Returns the values of the dictionary in a dict_values object
    itemsadict.items()Returns the key-value pairs in a dict_items object
    getadict.get(k)Returns the value associated with kNone otherwise
    getadict.get(k,alt)Returns the value associated with kalt otherwise




    반응형
Designed by Tistory.