2.1リスト内包
まず私たちは、このコードを見てリストを与える、循環させることにより、私は、1〜10のリストを追加したいと思います:
li = []
for i in range(1,11):
li.append(i)
print(li)
さて、上記に従ってに関するリスト内包を書くために私たちを必要とします。
ls = [i for i in range(1,11)]
print(ls)
上記のコードはリスト内包され、その後、我々はリストの内包カテゴリになります:
リスト内包は、2つのモードに分かれて:
1.循環モード:[反復可能で変数の変数(プロセス変数)]
2.スクリーニング・モード:[反復可能な条件であればにおける変数の変数(プロセス変数)]
2.1.1サイクルモード
- 10書かれたリスト内のすべての整数の二乗。
l1 = [i*i for i in range(1,11)]
print(l1)
- 100すべての偶数書かリスト内。
l1 = [i for i in range(2,101,2)]
print(l1)
- python1時代からpython24にリストLST期間を書きます
lst = [f'python{i}期' % i for i in range(1,25)]
print(lst)
f'python {I}の可変フォーマットされた出力上に、処理は可変です。
2.1.2スクリーニングモード
フィルタリングモードは、上記プラス決意条件に基づいている、状態変数がリストに残っています。
3つ以上のこのリストの要素は、滞在します。
l1 = [4, 3, 2, 6, 5, 5, 7, 8]
print([i for i in l1 if i > 3])
30数内で3で割り切れることができます。
multiples = [i for i in range(30) if i % 3 == 0] print(multiples)
3未満の長さの文字列のリストを濾過し、大文字に残り
l = ['wusir', 'laonanhai', 'aa', 'b', 'taibai'] # print([i.upper() for i in l if len(i) > 3])
名前リスト内のすべての名前を検索し、2つのネストされた「E」は含まれています(難しいです)
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] print([name for lst in names for name in lst if name.count('e') >= 2]) # 注意遍历顺序,这是实现的关键
2.2ジェネレータ式(非常に重要)
構文的に同じリストジェネレータ発現および理解が、[]ライン上の()です。例えばジェネレータ式にすべて10以下の数の二乗
gen = (i**2 for i in range(10))
print(gen)
# 结果: <generator object <genexpr> at 0x0000026046CAEBF8>
ジェネレータ式もスクリーニングすることができます
# 获取1-100内能被3整除的数
gen = (i for i in range(1,100) if i % 3 == 0)
for num in gen:
print(num)
そして、判別式を導出式のリストを生成します:
- 派生コンパレータリストメモリ消費量は、全てのワンタイムデータがメモリにロードされます。ジェネレータ式は、要素を一つずつ生成し、イテレータプロトコルに従います。
- 結果の値が異なっている、リスティングは、発電によって得られる発電式の式由来のリストを取得しています
- 式だけのメモリアドレスを生成するために、一目で理解を一覧表示します。
導出は使用することは非常に簡単ですとジェネレータ式、またはリスト内包表記かどうか、彼はちょうどPythonはほとんどが魅了されますので、これは慎重に導出のみでなければならない、建設の比較的簡単な方法を提供しますあなたが理解して構築することを示唆しないように、比較的複雑なテーマを構築し、定期的に(以上3サイクル)、法律のため、ネスティング、より。
不活性機構ジェネレータ:ジェネレータのみ値をアクセスのみ
1.1.4その他の関連する派生(理解)
辞書の導出
lst1 = ['jay','jj','meet']
lst2 = ['周杰伦','林俊杰','郭宝元']
dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
print(dic)
结果:
{'jay': '周杰伦', 'jj': '林俊杰', 'meet': '郭宝元'}
導出を設定します
セット導出は、直接機能セットのセットを生成するために私たちを助けることができる、それが機能を再設定しています派生障害は繰り返しません
lst = [1,2,3,-1,-3,-7,9]
s = {abs(i) for i in lst}
print(s)
结果:
{1, 2, 3, 7, 9}