python学習ノート-高度な特性20200309
7511 ワード
文書ディレクトリ高級特性 スライス exercise 反復 定義 反復dict対象: 反復文字列オブジェクト 反復可能対象か否か判断 リストクラスに対して下付きループを実現 exercise 小結 リスト生成式 リスト生成 現在のディレクトリの下にあるすべてのファイルとディレクトリ名をリストする 2変数でリストを生成 リスト生成式中if…else 練習 小結 ジェネレータ 定義 generatorの作成 フィボラッチ数列(Fibonacci) 楊輝三角形 反復器 小結 高度な機能
スライス
1 . リストまたはtupleの要素の一部を取ります.たとえば、次のようにします.正数をとる 逆数を取る list例 数字L=list(range(100)#0:99の数列Lを作成する[:10]L[-10:]L[10:20]L[:10:2]#上位10個、2個ごとに1個L[::5]#全数、5個ごとに1個L[:]#をそのままコピーするlist 文字列’xxx’‘ABCDEFG’[:3] tuple例(0,1,2,3,4,5)[:3]#上位3桁取り exercise
スライス操作により、trim()関数を実装し、文字列の先頭と末尾のスペースを除去します.
反復
定義#テイギ#
listまたはtupleが与えられた場合、forループによってこのlistまたはtupleを遍歴することができ、この遍歴を反復(Iteration)と呼ぶ.Pythonでは、反復はfor...inによって行われます.
反復dictオブジェクト:反復key:デフォルトdict反復はkey 反復value: keyとvalueを同時に反復:for k,v in d.items()
反復文字列オブジェクト
反復可能オブジェクトかどうかを判断する
collectionsモジュールのIterableタイプで判断
リストクラスに対する下付きループの実現
enumerate関数を使用すると、リストをインデックス-要素ペアに変更できます.これにより、forループでインデックスと要素自体を同時に反復できます.
exercise
反復を使用してlistの最小値と最大値を検索し、tupleを返します.
小結反復可能なオブジェクトは、我々がカスタマイズしたデータ型を含め、反復条件を満たす限り、forループを使用することができるforループに作用することができる.
リスト生成
リストの生成生成[1 x 1,2 x 2,3 x 3,…,10 x 10],
またはプラス判定[x*x for x in range(1,11)if x%2==0] 2層ループ、全配列生成
現在のディレクトリの下にあるすべてのファイルとディレクトリ名をリストします.
1行のコードで実現できます
2つの変数を使用してlistを生成文字列が小文字になる:s.lower() リスト生成式中if...else
用法:
練習する
小結
リスト生成式を用いると,リストを迅速に生成でき,1つのリストから別のリストを導出できるが,コードは非常に簡潔である.
ビルダー
定義#テイギ#
ジェネレータ:ループしながら計算、generator
Generatorの作成
方法1:リスト生成式の[]を()に変更 印刷:1.**next()**関数でgeneratorの次の戻り値を得る 2.循環実現
フィボラチ数列(Fibonacci)
普通の書き方注意:代入文a,b=b,a+bはaとbiにそれぞれbとa+b generator表記 print(b)をyield bに変更
関数をgeneratorに変更すると、next()で次の戻り値を取得するのではなく、forループを直接使用して反復します.
しかしforループでgeneratorを呼び出すと、generatorのreturn文の戻り値が得られないことがわかります.戻り値を取得するには、StopIterationエラーを取得する必要があります.戻り値はStopIterationのvalueに含まれます.
ヤングさんかくけい
method1
method2
result: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
反復器
forサイクルに直接作用するデータ型は、list、tuple、dict、set、strなどの集合データ型2 generator、ジェネレータおよびyield付きgenerator functionなど、いくつかあります.forループに直接作用するオブジェクトを総称して反復可能オブジェクト:Iterableと呼ぶ.isinstance()を使用して、1つのオブジェクトがIterableオブジェクトかどうかを判断できます ジェネレータはforループだけでなくnext()関数によって呼び出されて次の値を返すことも可能であり、最後にStopIterationエラーが投げ出されて次の値が戻らないことを示すまで next()関数によって呼び出され、次の値を繰り返すオブジェクトを反復器:Iteratorと呼びます. isinstance()を使用して、1つのオブジェクトがIteratorオブジェクトかどうかを判断できる from collections import Iterator isinstance((x for x in range(10)), Iterator) ジェネレータはすべてIteratorオブジェクトですが、list、dict、strはIterable(反復可能)ですがIteratorではありません ist、dict、strなどのIterableがIteratorになったらiter()関数を使用可能: 反復器か判断
ここでiter(‘abc’)はstrをIteratorに変換する反復可能対象か否か判断:collectionsモジュールによるIterableタイプ判断
注意:list、dict、strなどのデータ型はIteratorではありません:理由:PythonのIteratorオブジェクトは、next()関数によって呼び出され、データがないときにStopIterationエラーが投げ出されるまで次のデータを返すことができるデータストリームを表す.このデータストリームは秩序あるシーケンスと見なすことができるが,シーケンスの長さを事前に知ることはできず,next()関数を介して次のデータをオンデマンドで計算するしかないため,Iteratorの計算は不活性であり,次のデータを返す必要がある場合にのみ計算される. Iteratorは、全体の自然数など、無限大のデータストリームを表すこともできる.リストを使用すると、自然数全体を格納することは永遠に不可能です.
小結forループに作用する対象はすべてIterableタイプである. next()関数に作用するオブジェクトはすべてIteratorタイプであり、それらは不活性計算のシーケンスを表す. リスト、dict、strなどの集合データ型はIterableでありIteratorではないが、iter()関数でIteratorオブジェクトを1つ得ることができる. Pythonのforループは本質的にnext()関数を呼び出し続けることによって実現される、例えば:
実際には、
スライス
1 . リストまたはtupleの要素の一部を取ります.たとえば、次のようにします.
L=['M','S','T','B','J']
[L[0],L[1],L[2]] #a.
r=[]
n=3
for i in range(n):
r.append(L[i]) #b.
L[0:3] #c.
L[-1] #
L[-2:] #
スライス操作により、trim()関数を実装し、文字列の先頭と末尾のスペースを除去します.
def trim(s)
if s[0] != ' ' and s[-1] !=' '
return s
elif s[0] == ' '
return s[1:]
elif s[-1] == ' '
return s[:-1]
反復
定義#テイギ#
listまたはtupleが与えられた場合、forループによってこのlistまたはtupleを遍歴することができ、この遍歴を反復(Iteration)と呼ぶ.Pythonでは、反復はfor...inによって行われます.
反復dictオブジェクト:
d={'a',:1'b':2,'c':3}
for key in d:
print(key)
for value in d.values():
print(value)
for k,v in d.items():
print(value)
反復文字列オブジェクト
for ch in 'ABC'
print(ch)
反復可能オブジェクトかどうかを判断する
collectionsモジュールのIterableタイプで判断
from collections import Iterable
isinstance('abc',Iterable)
リストクラスに対する下付きループの実現
enumerate関数を使用すると、リストをインデックス-要素ペアに変更できます.これにより、forループでインデックスと要素自体を同時に反復できます.
for i,value in enumerate(['A','B','C']):
print(i,value)
>>> for x,y in[(4,5),(2,3),(1,1)]:
print(x,y)
4 5
2 3
1 1
exercise
反復を使用してlistの最小値と最大値を検索し、tupleを返します.
def findMinAndMax(L):
if len(L)!=0:
min=99999999
max=-99999999
for i in L:
if imax:
max=i
return min,max
else:
return(None,None)
小結
リスト生成
リストの生成
list(range(1,11))
listの生成[1,2,3,4,5,6,7,8,9,10]L=[]
for x in range(1,11):
L.append(x*x)
または
[x*x for x in range(1,11)]
リスト生成式生成する要素x*xを前面に置き、後にforループ[m+n for m in 'ABC' for n in 'XYZ']
現在のディレクトリの下にあるすべてのファイルとディレクトリ名をリストします.
1行のコードで実現できます
import os # os
[d for d in os.listdir('.')] #os.listdir
2つの変数を使用してlistを生成
d = {'x':'A','y':'B','z':'C' }
[k + '=' + v for k , v in d.items()]
用法:
[x if x % 2 == 0 else -x for x range(1,11)]
=>[x if...else for x in...]練習する
L=['Hello','World',18,'Apple',None]
[x.lower() if isinstance(x,str) else x for x in L]
小結
リスト生成式を用いると,リストを迅速に生成でき,1つのリストから別のリストを導出できるが,コードは非常に簡潔である.
ビルダー
定義#テイギ#
ジェネレータ:ループしながら計算、generator
Generatorの作成
方法1:
g = (x * x for x in range(10)) # generator
g = (x * x for x in range(10)) # generator
for n in g:
print(n)
フィボラチ数列(Fibonacci)
普通の書き方
def fib(max):
n,a,b,0,0,1
while n
def fib(max):
n,a,b=0,0,1
while n
関数をgeneratorに変更すると、next()で次の戻り値を取得するのではなく、forループを直接使用して反復します.
for n in fib(6):
print(n)
しかしforループでgeneratorを呼び出すと、generatorのreturn文の戻り値が得られないことがわかります.戻り値を取得するには、StopIterationエラーを取得する必要があります.戻り値はStopIterationのvalueに含まれます.
g = fib(6)
>>> while True:
... try:
... x = next(g)
... print('g:', x)
... except StopIteration as e:
... print('Generator return value:', e.value)
... break
ヤングさんかくけい
method1
def triangles()
f=[]
while True:
f=[f[i-1]+f[i] if i!=0 and i!=len(f) else 1 for i in range(len(f)+1)]
yield f
method2
def triangles()
a=[1]
while True:
yield a
a.append(0)
a=[a[i-1]+a[i] for i in range(len(a))]
##
n=0
for t in triangles():
print(t)
n=n=+1
if n==10:
break
result: [1] [1, 1] [1, 2, 1] [1, 3, 3, 1] [1, 4, 6, 4, 1] [1, 5, 10, 10, 5, 1] [1, 6, 15, 20, 15, 6, 1] [1, 7, 21, 35, 35, 21, 7, 1] [1, 8, 28, 56, 70, 56, 28, 8, 1] [1, 9, 36, 84, 126, 126, 84, 36, 9, 1]
反復器
forサイクルに直接作用するデータ型は、list、tuple、dict、set、strなどの集合データ型2 generator、ジェネレータおよびyield付きgenerator functionなど、いくつかあります.
>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True
ここでiter(‘abc’)はstrをIteratorに変換する
from collections import Iterable
isinstance('abc',Iterable)
注意:list、dict、strなどのデータ型はIteratorではありません:理由:
小結
for x in [1, 2, 3, 4, 5]:
pass
実際には、
# Iterator :
it = iter([1, 2, 3, 4, 5])
# :
while True:
try:
# :
x = next(it)
except StopIteration:
# StopIteration
break