본문 바로가기

python tutorial -5 자료 구조

python tutorial

part 5

자료 구조 データ構造

 

https://docs.python.org/ko/3/tutorial/datastructures.html

 

 


5.1. 리스트 더 보기リストについてもう

 

리스트 메소드 リストデータメソッド

 

list.append(x)

    리스트의 끝에 항목을 더함

    a[len(a):] = [x]


    リストの末尾要素追加します

a[len(a):] = [x] 等価です

 


list.extend(iterable)

리스트의 끝에 이터러블의 모든 항목을 덧붙여서 확장

a[len(a):] = iterable

    

イテラブルのすべての要素対象のリストに追加リストを拡張します

a[len(a):] =iterable 等価です

 


list.insert(i, x)

주어진 인덱스에 항목을 삽입

a.insert(0, x) 는 리스트의 처음에 삽입

a.insert(len(a), x) = a.append(x)

 

指定した位置要素挿入します

1 引数リストのインデクスでそのインデクスを要素直前挿入われます

a.insert(0, x) はリストの先頭挿入います

a.insert(len(a), x) a.append(x) 等価です

 

list.remove(x)

리스트에서 값 x 첫 번째 항목을 삭제

항목이 없으면 ValueError


リストx しい最初要素削除します

該当する要素がなければ ValueError 送出されます

 


list.pop([i])

주어진 인덱스의 값을 빼옴 (값을 가져오며 삭제함)

인덱스를 지정하지 않은 a.pop()은 마지막 항목을 pop함

 

([i] : 매개변수가 선택적임을 표현.

그 위치에 꺾쇠괄호를 입력해야 한다는 뜻이 아닙니다.

이 표기법은 파이썬 라이브러리 레퍼런스에서 자주 등장합니다.)

 

リスト指定された位置にある要素をリストから削除してその要素します

インデクスが指定されなければa.pop() はリストの末尾要素削除してします

この場合要素削除されます

 

(メソッドの用法 (signature) i 両側にある角括弧

この引数がオプションであることをしているだけなので角括弧入力する必要はありません

この表記法Python Library Reference 頻繁ることになるでしょう)

 


list.clear()

    리스트의 모든 항목을 삭제

    del a[:]


    リストての要素削除しますdel a[:] 等価です

 


list.index(x[,start[,end]])

첫번째 x의 인덱스를 구함

항목이 없으면 ValueError

선택 인자 start end 는 슬라이스 표기법처럼 해석

검색을 리스트의 특별한 서브 시퀀스로 제한하는 데 사용

돌려주는 인덱스는 start 인자가 아니라 전체 시퀀스의 시작을 기준

 

リストx しい最初要素位置をゼロからまる添字します

該当する要素がなければ ValueError 送出されます

 

任意引数である start end はスライス記法として解釈されリストの探索範囲指定できます

される添字start 引数からの相対位置ではなくリスト全体先頭からの位置になります

 


list.count(x)

리스트에서 x가 등장하는 횟수를 돌려줍니다.

リストでの x 出現回数します

 


list.sort(key=None, reverse=False)

리스트의 항목들을 정렬


リストの項目インプレース演算でソートします(in placeのデータを演算結果えるやりかた)


 

list.reverse()

리스트의 요소들을 제자리에서 뒤집습니다.

リストの要素インプレース演算逆順にします

 


list.copy()

리스트 사본을 돌려줍니다a[:]

リストの(shallow) コピーをしますa[:] 等価です


ex)

>>> fruits = ['orange', 'apple', 'pear', 'banana', 'kiwi', 'apple', 'banana']
>>> fruits.count('apple')
2
>>> fruits.count('tangerine')
0
>>> fruits.index('banana')
3
>>> fruits.index('banana', 4)  # Find next banana starting a position 4
6
>>> fruits.reverse()
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange']
>>> fruits.append('grape')
>>> fruits
['banana', 'apple', 'kiwi', 'banana', 'pear', 'apple', 'orange', 'grape']
>>> fruits.sort()
>>> fruits
['apple', 'apple', 'banana', 'banana', 'grape', 'kiwi', 'orange', 'pear']
>>> fruits.pop()
'pear'

 

 

insert, remove, sort 메소드 : 

리스트를 수정할 뿐 / 출력 x

기본 None값 반환

 

insert, remove, sort などのリストを操作するメソッドの表示されていないことにいたかもしれません

これらのメソッドは None しています

 

 

다른 언어들에서는 가변 객체를 돌려주기도 하는데,  d->insert("a")->remove("b")->sort(); 와 같은 메서드 연쇄를 허락합니다.

言語では変更可能なオブジェクトをしてd->insert("a")->remove("b")->sort(); のようなメソッドチェインをしている場合もあります

 

 

이것은 파이썬에서 모든 가변 자료 구조들에 적용되는 설계 원리입니다.

これは Python 変更可能なデータ構造全てについての設計上原則となっています

 

 




5.1.1. 리스트를 스택으로 사용하기 リストをスタックとして使


스택 - "last-in, first-out"

스택의 꼭대기에 값 넣기 : append()

스택의 꼭대기에서 값 꺼내기 : pop()

 

リストのメソッドのおかげで簡単にリストをスタックとして使えます

スタックでは最後追加された要素最初されます ("last-in, first-out")

    スタックの一番上要素追加するには append() 使います

    スタックの一番上から要素には pop() をインデクスを指定せずに使います

 

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]

 





5.1.2. 리스트를 큐로 사용하기 リストをキューとして使

 

큐 - "first-in, first-out"

    리스트는 큐에 효율적이지 않음

 

リストをキュー (queue) として使うことも可能です

この場合最初追加した要素最初します ("first-in, first-out")

しかしリストでは効率的にこの目的達成することが出来ません

 

리스트의 끝에 값을 넣고 빼는 것은 빠르지만,

리스트의 처음에 값을 넣고 빼는 것은 느림

- 뒤 값들을 모두 한 칸씩 앞으로 이동시켜야 하기 때문

 

追加appendpopをリストの末尾してうとのですが

挿入insertpopをリストの先頭してくなってしまいます

要素をひとつずつずらす必要があるからです

 

 

큐 구현 

collections.deque  사용 

추가 : .append(값)

빼기 : .popleft(값)

 

キューの実装にはcollections.deque 使うといでしょう

このクラスは設計されていて高速追加appendpop両端して実現しています

 

>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry")           # Terry arrives
>>> queue.append("Graham")          # Graham arrives
>>> queue.popleft()                 # The first to arrive now leaves
'Eric'
>>> queue.popleft()                 # The second to arrive now leaves
'John'
>>> queue                           # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])

 




5.1.3. 리스트 컴프리헨션 リストの内包表記

 

리스트 컴프리헨션 : 간단히 리스트를 만드는 방법

リスト内包表記はリストを生成する簡潔手段提供しています

 

    - 각 요소에 연산 결과 리스트 생성

    - 조건을 만족하는 서브 시퀀스 생성

 

利用場面

あるシーケンスや iterable (イテレート可能オブジェクト) のそれぞれの要素してある操作った結果要素にしたリストをったり

ある条件たす要素だけからなる部分シーケンスを作成することです

 

 

ex) 

제곱수의 리스트 만들기

のような平方のリストをりたいとします:

 

>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 

변수 x 생성, for문이 끝나도 남아있음

これはループが終了したにも存在する x という名前変数(または上書きする) ことに注意してください

 

 

간결하게

以下のようにして平方のリストをいかなる副作用もなく計算することができます:

 

squares = list(map(lambda x: x**2, range(10)))

 


더 간결하게

squares = [x**2 for x in range(10)]

 

 

리스트 컴프리헨션

구성 :  = [for / if 문]

결과 : 새 리스트.

for if 절의 문맥에서 표현식의 값을 구해서 만들어집니다.


これはより簡潔みやすいです

リスト内包表記括弧for そして0個以上for if 構成されます。 

リスト内包表記実行結果for if のコンテキスト評価した結果からなるしいリストです

 

 

ex) 

두 리스트 항목의 서로 같지 않은 것끼리 결합

えばのリスト内包表記2つのリストの要素からうもの同士をペアにします

>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]


=

>>> combs = []
>>> for x in [1,2,3]:
...     for y in [3,1,4]:
...         if x != y:
...             combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

 

 for if 문의 순서가 같음

        표현식이 튜플이면 (즉 앞의 예에서 (x, y)), 반드시 괄호로 둘러싸야 함.

 

for if 両方のコードで順序になっていることに注目してください

がタプルの場合 (: (x, y) 場合) タプルに円括弧必要です

 

>>> vec = [-4, -2, 0, 2, 4]
>>> # create a new list with the values doubled
>>> [x*2 for x in vec]
[-8, -4, 0, 4, 8]
>>> # filter the list to exclude negative numbers
>>> [x for x in vec if x >= 0]
[0, 2, 4]
>>> # apply a function to all the elements
>>> [abs(x) for x in vec]
[4, 2, 0, 2, 4]
>>> # call a method on each element
>>> freshfruit = ['  banana', '  loganberry ', 'passion fruit  ']
>>> [weapon.strip() for weapon in freshfruit]
['banana', 'loganberry', 'passion fruit']
>>> # create a list of 2-tuples like (number, square)
>>> [(x, x**2) for x in range(6)]
[(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
>>> # the tuple must be parenthesized, otherwise an error is raised
>>> [x, x**2 for x in range(6)]
  File "<stdin>", line 1, in <module>
    [x, x**2 for x in range(6)]
               ^
SyntaxError: invalid syntax
>>> # flatten a list using a listcomp with two 'for'
>>> vec = [[1,2,3], [4,5,6], [7,8,9]]
>>> [num for elem in vec for num in elem]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 

 

리스트 컴프리헨션은 복잡한 표현식과 중첩된 함수들을 포함할 수 있습니다:

リスト内包表記には複雑関数呼しのネストができます:

 

>>> from math import pi
>>> [str(round(pi, i)) for i in range(1, 6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

 

 

 


5.1.4. 중첩된 리스트 컴프리헨션 ネストしたリストの内包表記

 

리스트 컴프리헨션의 첫 표현식으로 임의의 표현식이 올 수 있는데, 다른 리스트 컴프리헨션도 가능합니다.

リスト内包表記中最初任意なのでそこにのリスト内包表記くこともできます

 


3x4 행렬

4のリスト3つからなる3x4 matrix についてえます:

 

>>> matrix = [
...     [1, 2, 3, 4],
...     [5, 6, 7, 8],
...     [9, 10, 11, 12],
... ]

 


행과 열 전치

のリスト内包表記matrix えます:

>>> [[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

 

 

중첩된 리스트 컴프리헨션뒤 for의 문맥에서 값이 구해집니다.


たようにネストしたリスト内包表記for のコンテキストの評価されます

なのでこののコードと等価です:

 

>>> transposed = []
>>> for i in range(4):
...     transposed.append([row[i] for row in matrix])
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

 

=

>>> transposed = []
>>> for i in range(4):
...     # the following 3 lines implement the nested listcomp
...     transposed_row = []
...     for row in matrix:
...         transposed_row.append(row[i])
...     transposed.append(transposed_row)
...
>>> transposed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

 

 

실제, 복잡한 흐름 문보다 내장 함수들을 선호해야 합니다.

実際には複雑れのよりも関数使です


 zip() 함수

この場合 zip() 関数仕事をしてくれるでしょう:

 

>>> list(zip(*matrix))
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

 




5.2. del del

 

del

리스트에서 인덱스로 항목을 삭제

이것은 값을 돌려주는 pop()과 다름!

슬라이스로 삭제하거나 전체 리스트를 비우는 데도 사용 (빈 리스트를 슬라이스에 대입)


リストから要素削除する指定するわりにインデックスを指定する方法があります

それが del ですこれは pop() メソッドとしません

 

del はリストからスライスを除去したり

リスト全体削除することもできます(以前はスライスにのリストを代入してっていました)

 

 

>>> a = [-1, 1, 66.25, 333, 333, 1234.5]
>>> del a[0]
>>> a
[1, 66.25, 333, 333, 1234.5]
>>> del a[2:4]
>>> a
[1, 66.25, 1234.5]
>>> del a[:]
>>> a
[]

 

 

 

del 는 변수를 삭제 함

del 変数全体削除にも使えます:

 

>>> del a

 

삭제 후 a 를 참조하는 것은 에러 (적어도 다른 값이 새로 대입되기 전까지).

この名前 a 参照すると(a 代入するまで) エラーになります

 


 


5.3. 튜플과 시퀀스 タプルとシーケンス

 

리스트와 문자열 

- 인덱싱 슬라이싱 연산과 같은 많은 성질을 공유함

- 시퀀스 자료 형 : list, tuple, range, string

 

リストや文字列にはインデクスやスライスを使った演算のように数多くの共通性質があることをてきました

これらは シーケンス (sequence) データ(シーケンス--- list, tuple, range 参照) つのです

 

튜플

시퀀스 자료

쉼표로 구분되는 여러 값으로 구성

 

Python はまだ進歩過程にある言語なのでのシーケンスデータ追加されるかもしれません

標準のシーケンスはもうつあります: タプル (tuple) です

タプルはコンマで区切られたいくつかのからなります

 

>>> t = 12345, 54321, 'hello!'
>>> t[0]
12345
>>> t
(12345, 54321, 'hello!')
>>> # Tuples may be nested:
... u = t, (1, 2, 3, 4, 5)
>>> u
((12345, 54321, 'hello!'), (1, 2, 3, 4, 5))
>>> # Tuples are immutable:
... t[0] = 88888
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> # but they can contain mutable objects:
... v = ([1, 2, 3], [3, 2, 1])
>>> v
([1, 2, 3], [3, 2, 1])

 

튜플 

출력 : 항상 괄호 - 중첩 튜플을 올바르게 해석 가능

입력 : 괄호없이도 가능 (튜플이 더 큰 표현식 이면 괄호 필요)

 

튜플 개별항목에 값 대입 : 불가능

리스트 같은 가변 객체를 포함하는 튜플은 만들 수 있음.

 

のとおりタプルの表示には丸括弧がついていてタプルのネストがしく解釈されるようになっています

タプルをくときはずしも丸括弧まなくてもいいですが(タプルがきな一部だった場合) 丸括弧必要場合もあります


タプルの要素代入することはできません

しかしタプルにリストのような変更可能型めることはできます

 

 

튜플 vs 리스트

タプルはリストとていますがたいていなる場面なる目的利用されます

 

튜플

불변 (immutable)

다른 종류의 요소

タプルは不変型 (immutable) 複数要素からなることもあり

 

요소들은 언 패킹이나 인덱싱으로 액세스 가능 (네임드튜플은 어트리뷰트로도 가능)

要素はアンパック操作やインデックスでアクセスすることがいです(namedtuples 場合属性)

 

리스트

가변 (mutable)

같은 종류의 요소

리스트에 대한 이터레이션으로 액세스

 

一方リストは変更可能 (mutable) 要素はたいていのオブジェクトであり

たいていイテレートによってアクセスします

 

 

항목이 0개 / 1개 튜플

- 빈 튜플 : 빈 괄호

- 1개 항목의 튜플 : 1개 항목 뒤에 쉼표 (괄호 안에 항목 1개가 아님)

 

問題0 または 1 項目からなるタプルの構築ですこれらの操作うため構文には特別細工がされています

のタプルは丸括弧ペア構築できます

つの要素つタプルはろにコンマをける (単一丸括弧むだけでは不十分です) ことで構築できます

しくはないけれども効果的です

 

>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)

 

 

튜플 패킹

t = 12345, 54321, 'hello!'

12345, 54321, 'hello!' 튜플로 패킹

 

t = 12345, 54321, 'hello!' は タプルのパック (tuple packing) です

12345, 54321, 'hello!' つのタプルにパックされます

 

 

시퀀스 언 패킹

x, y, z = t

오른쪽에 어떤 시퀀스가 와도 됨.(ex) 리스트, 튜플)

시퀀스 언 패킹은 같은 길이 요구 - 다르면 valueError -->  ‘_’ 로 자리를 채움

다중 대입은 사실 튜플 패킹과 시퀀스 언 패킹의 조합

 

シーケンスのアンパック (sequence unpacking)

右辺にはてのシーケンス使うことができます

シーケンスのアンパックでは等号左辺列挙されている変数右辺のシーケンスのさとだけあることが要求されます

複数同時代入はタプルのパックとシーケンスのアンパックをわせたものにぎないことに注意してください

 

 

 


5.4. 집합 集合型

 

집합 자료형

집합은 중복, 순서 없는 컬렉션

기본 용도: 멤버 검사와 중복 엔트리 제거

집합 객체는 수학적 연산 지원 (합집합, 교집합, 차집합, 대칭 차집합)

 

集合 (set)

集合とは重複する要素をもたない順序づけられていない要素まりです

Set オブジェクトは(union)(intersection)(difference)対称差 (symmetric difference)といった数学的演算もサポートしています

 

집합 생성

{ }나 set() 사용

주의: 빈 집합 : set() (cf) {} : 빈 딕셔너리 )

 

中括弧または set() 関数set 生成するために使用することができます

: 空集合作成するためには set() 使用しなければなりません({} : 辞書作成します)


>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket)                      # show that duplicates have been removed
{'orange', 'banana', 'pear', 'apple'}

>>> 'orange' in basket # fast membership testing True >>> 'crabgrass' in basket False


>>> # Demonstrate set operations on unique letters from two words ... >>> a = set('abracadabra') >>> b = set('alacazam') >>> a # unique letters in a {'a', 'r', 'b', 'c', 'd'}

>>> a - b # letters in a but not in b {'r', 'd', 'b'} >>> a | b # letters in a or b or both {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # letters in both a and b {'a', 'c'} >>> a ^ b # letters in a or b but not both {'r', 'd', 'b', 'm', 'z', 'l'}

 

 

집합 컴프리헨션

リスト内包 同様set 内包もサポートされています:

 

>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

 

 




5.5. 딕셔너리 辞書型 (dictionary)

 

딕셔너리 (= 사전형 dictionary)

- 매핑 컬렉션 (‘을 짝지어 모아두는 데이터 저장방식. ‘로 데이터를 검색)

- 다른 언어 "연관 메모리(associative memories)" "연관 배열(associative arrays)" 의 형태

 

もう有用Python まれていますそれは 辞書 (dictionary) (マッピング)です

辞書言語にも "連想記憶 (associated memory)" "連想配列 (associative array)" という名前存在することがあります

 

 

시퀀스 인덱싱 :  ‘순서(숫자)’ 

딕셔너리 인덱싱 - ‘’ 

 

 

키 - 불변형으로 이루어 짐

- 문자열 / 숫자 / 문자열, 숫자, 튜플로만 이루어진 튜플

- 직접/간접적으로 가변 객체를 포함한 튜플 x

- 리스트 x

 

ある範囲でインデクスされているシーケンスとなり辞書は キー (key) でインデクスされています

このキーはらかの変更不能になります文字列数値にキーにすることができます

 

タプルは文字列数値そののタプルのみを場合はキーにすることができます直接あるいは間接的変更可能なオブジェクトをむタプルはキーにできません

 

リストをキーとして使うことはできません

これはリストにスライスやインデクス指定代入ったりappend()extend() のようなメソッドを使うとインプレースで変更することができるためです

 

 

딕셔너리 맏들기

- 제약 조건 : 키 중복 x

- {1:1, 2:2, 3:3, ... }

- 빈 딕셔너리 : {}

 

辞書は キー(key): 

(value) のペアの集合でありキーが (辞書)一意でければならないえるとよいでしょう

波括弧 (brace) のペア: {} 辞書生成しますカンマで区切られた key: value のペアを波括弧ペアのれると辞書初期値となる key: value 追加されます

この表現方法出力時辞書されるのと方法です

 

딕셔너리 연산

key:value 형태로 저장

key값으로 value 출력

del - key:value 삭제


중복 키 저장 - 값 덮어 씀

없는 키로 값 출력 - 에러

 

辞書での操作

あるらかのキーをけて記憶することとキーを指定してすことです

del key: value のペアを削除することもできます

すでに使われているキーを使って記憶すると以前そのキーに関連づけられていたられてしまいます

存在しないキーを使ってそうとするとエラーになります

 

list(d)

    키를 삽입순서대로 리스트로 출력


sorted(d)

    키를 정렬하여 출력


keyword in 딕셔너리

    딕셔너리에 ‘keyword’라는 키가 있는지 검

 

辞書オブジェクトにし 

list(d) 実行すると辞書使われているてのキーからなるリストをキーが挿入された順番します

(ソートされたリストがしい場合わりに sorted(d) 使ってください)

ある単一のキーが辞書にあるかどうか調べるにはin キーワードを使います

 


>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'jack': 4098, 'sape': 4139, 'guido': 4127}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'jack': 4098, 'guido': 4127, 'irv': 4127}
>>> list(tel)
['jack', 'guido', 'irv']
>>> sorted(tel)
['guido', 'irv', 'jack']
>>> 'guido' in tel
True
>>> 'jack' not in tel
False

 



dict()

key-value 쌍들의 시퀀스로 부터 직접 딕셔너리를 구성합니다.

dict() コンストラクタはキーとのペアのタプルをむリストから辞書生成します:

 

>>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
{'sape': 4139, 'guido': 4127, 'jack': 4098}

 



딕셔너리 컴프리헨션 

辞書内包表現使って任意のキーとのペアから辞書れます:

 

>>> {x: x**2 for x in (2, 4, 6)}
{2: 4, 4: 16, 6: 36}

 



'키'가 '문자열'일 때, '키워드 인자'로 value를 지정할 수 있음

キーが単純文字列場合キーワード引数使って定義する単純場合もあります:

 

>>> dict(sape=4139, guido=4127, jack=4098)
{'sape': 4139, 'guido': 4127, 'jack': 4098}

 

 

 


5.6. 루프 테크닉 ループのテクニック

 

딕셔너리.items()

辞書してループを

items() メソッドを使うとキーとそれに対応する同時せます

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

 


 

시퀀스 : enumerate()

シーケンスにわたるループを

enumerate() 関数使うと要素インデックスと要素同時すことができます

 

>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

 

 


둘 이상 시퀀스, zip()

つまたはそれ以上のシーケンス同時にループするために関数 zip() 使って各要素をひとみにすることができます

>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.




시퀀스를 거꾸로 루프 reversed()

 

シーケンスを逆方向ってループするには

まずシーケンスの範囲順方向指定いで関数 reversed() します

 

>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

 


 

sorted() : 정렬된 새 리스트

 

シーケンスをソートされた順序でループするにはsorted() 関数使いますこの関数配列変更せずソートみのたな配列します

 

>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana'] >>> for f in sorted(set(basket)):    # 기준 알파벳 순 ... print(f) ... apple banana orange pear

 


루프에 있는 리스트를 변경 - 새 리스트를 만드는 것이 더 간단, 더 안전 

ときどきループでリストを変更したい誘惑られるでしょうがわりにしいリストをってしまうほうがより簡単安全なことがままあります


>>> import math
>>> raw_data = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
>>> filtered_data = []
>>> for value in raw_data:
...     if not math.isnan(value):
...         filtered_data.append(value)
...
>>> filtered_data
[56.2, 51.7, 55.3, 52.5, 47.8]

 

 



5.7. 조건 더 보기 条件についてもう

 

 

while if : 조건에 비교뿐만 아니라 모든 연산자 사용가능

while if 使った条件 (condition) には比較だけでなく演算子使うことができます

 

 

in, not in : 값이 있는지 check

is, is not : 두 객체가 같은 객체인지 비교

가변 객체만 해당 (ex) list)

우선순위 : 산술 >비교 

 

比較演算子 in および not in

あるがあるシーケンス存在するか (または存在しないか) どうかを調べます

演算子 is および is not つのオブジェクトが実際じオブジェクトであるかどうかを調べます

この比較リストのような変更可能なオブジェクトにだけ意味がありますての比較演算子優先順位っておりともに数値演算子よりも優先順位となります(訳注: is is None のようにシングルトンの変更不能オブジェクトとの比較いる場合もあります(変更可能なオブジェクトにだけ意味があります部分削除することを Doc-SIG 提案中))

 

 

 

비교 - 연쇄가능

a < b == c

a b 보다 작고, 동시에 b c 와 같은지 검사합니다.

 

比較連結させることができます

えばa < b == c a b よりさくかつ b cしいかどうかをテストします

 

 

논리 연산자 (and, or, not)

우선순위 : 비교 > 논리 (not > and > or)

A and not B or C = (A and (not B)) or C

 

ブール演算子 and or 比較演算わせることができます

そして比較演算 (あるいはらかのブール) 結果否定not でとれますこれらの演算子比較演算子よりも優先順位になっています

A and not B or C (A and (not B)) or C 等価になるようにブール演算子not 優先順位or くなっています

もちろん丸括弧使えばみのわせを表現できます



논리 연산자 and or 는 소위 단락-회로(short-circuit) 연산자

인자들은 왼쪽에서 오른쪽으로 값이 구해지고, 결과가 결정되면 값 구하기는 중단

 

A, C : , B :거짓

A and B and C C 의 값을 구하지 않음

 

 

논리값이 아닌 일반 값으로 사용될 때,

단락-회로 연산자의 반환 값은 마지막 값이 구해진 인자입니다.

결과를 변수에 대입할 수 있습니다.

 

ブール演算子 and or いわゆる 短絡 (short-circuit) 演算子です

これらの演算子引数からへと評価され結果確定した時点評価めます

えばA C B のときA and B and C C 評価しません

 

一般短絡演算子をブールではなくて一般的としていると最後評価された引数になります

比較のブール結果変数代入することもできます

 

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

 

 

대입은 표현식 안에 등장할 수 없습니다. (C와 다름)

C의 문제 회피( ===로 입력하는 실수)

 

Python ではC 言語って内部代入えないので注意してください

C 言語のプログラマは不満うかもしれませんが

C 言語プログラムで遭遇する== のつもりで = とタイプしてしまうといったありふれた問題回避します

 

 

 


5.8. 시퀀스와 다른 형 비교하기 シーケンスとその比較

 

시퀀스 객체들은 같은 시퀀스 형과 비교가능

 

사전식 순서

차례대로 비교. 어느 한 시퀀스가 소진될 때까지 계속합니다.

 

만약 비교되는 두 항목 자체가 같은 형의 시퀀스면, 사전식 비교가 재귀적으로 수행

모든 항목이 같으면 같은 것으로 취급

 

포함되는 짧은 시퀀스는 작은 것입니다.

문자열의 사전식 배열은 개별 문자들의 순서를 정하는데 유니코드 코드 포인트 숫자를 사용합니다.

 

 

シーケンスオブジェクトはじシーケンスのオブジェクトと比較できます

比較には 辞書的(lexicographical) 順序いられます

まず最初つの要素比較そのしくなければその時点比較結果まりますしければつの要素比較以降シーケンスの要素きるまでけます

比較しようとするつの要素がいずれもじシーケンスであればそのシーケンスでの辞書比較再帰的います

つのシーケンスのての要素比較結果しくなればシーケンスはしいとみなされます

片方のシーケンスがもう一方先頭部分にあたる部分シーケンスならばのシーケンスがさいシーケンスとみなされます

文字列する辞書的順序づけには々の文字べるのに Unicode コードポイントのいます


(1, 2, 3)              < (1, 2, 4)
[1, 2, 3]              < [1, 2, 4]
'ABC' < 'C' < 'Pascal' < 'Python'
(1, 2, 3, 4)           < (1, 2, 4)
(1, 2)                 < (1, 2, -1)
(1, 2, 3)             == (1.0, 2.0, 3.0)
(1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

 

 

서로 다른 형의 객체들을 <, > 비교하는 것, 그 객체들이 적절한 비교 메서드들을 갖고 있을 때만 허락

 

예를 들어

서로 다른 숫자 형들은 그들의 숫자 값에 따라 비교 그래서 00.0과 같고, 등등.

그렇지 않으면, TypeError 를 일으킵니다.

 

のオブジェクト同士< > 比較することもそれらのオブジェクトが適切比較メソッドを提供しているのであれば許可されますえばなる数値型同士比較ではその数値によって比較われますえば0 0.0 等価です一方適切比較順序がない場合インタープリターは TypeError 例外発生させます