8.13 day14

式のトリプレット

三項式を囲む、主な役割は、長いリストに、コードの行数濃縮ラインにあります。いわゆる濃度が本質です。そうすることで、コードを実行するために多くのスペースを節約することができます

式のトリプレットは、デュアル分岐構造をサポートしています

コードの次のセクションでは、より一般的なコード二分岐構造であります

    fronts = [1,2,4,4,7]
    backs = [1,3,4,1,3]
    a = set(fronts + backs)
    for i, j in zip(fronts, backs):
        if i == j:
            a -= {i}
            if a == set():
                return 0
    else:
        return min(a)

三元表現の場合、このコードは非常にシンプルになります。

fronts = [1,2,4,4,7]
backs = [1,3,4,1,3]
return min(set(fronts+backs)-{i for i, j in zip(fronts, backs) if i == j} or [0])

彼の顔に疑問符を感じませんか?

しかし、実際には、式のトリプレットはあなたより少ないコードになり、そしてロジック自体は変更されていません。そして、他の人があなたのコードは非常に困難になるだろう理解し、それを使用することは推奨されません

リスト内包

リストは、特定のニーズを満たすために、リストを生成する式は非常に単純な方法の反復トラバース要素または他のオブジェクトのリストを導出するために使用して迅速フィルタリングすることができ、読み取り可能なコードは非常に強いです、Pythonは最も広く使用されている技術のプログラム開発でありますA。速いスピードを確保することができ、最適化の多くを行っPythonのリスト内包の内部実装は、また、技術の使用をお勧めします。

リストループと論理的に等価内包が、より簡潔な形

aList = [x*x for x in range(10)]

# 等价于:
aList = []
for x in range(10):
aList.append(x*x)

式の辞書

一緒に - 辞書式は、一般的に(「パッケージリスト内のタプルジップ機能)ジップ

これは、リスト内包に似ていますが、また、辞書の生成を簡単にするために

new_dic = {k * 2: v ** 2 for k, v in dic.items()}
print(new_dic)

z = zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4])  # 压缩方法,Python解释器的内置方法
for k,v in z:
    print(k,v)

ジェネレータ

Builderはカスタムイテレータで、自分のイテレータから作られます

産出

生産を意味する英語の単語の収量、yieldキーワードは、関数に表示され、その後、関数を呼び出すたび、関数本体がコードを実行していきませんが、値を返します。


def func():
print(1)
yield
print(2)
yield
g = func()
print(g)

だけではなくイテレータも収量の主な役割は遮断されますが、ここに置かfは機能、本質ジェネレータイテレータの多くを達成することができますが、

歩留まりの三つの特徴

  1. 収量関数は、発電機(カスタム・イテレータオブジェクト、及び___iter__ __next__方法を有する)になることができ
  2. 収量機能を停止させることができ、その後、次の次の実行は、再び次のコードを得ます
  3. n個の発生器の収率は、n個の要素を有する、nは次回、次回は、n + 1が与えられることができます

特性を返します

1.戻り値

2.終了関数

def func():
    yield [1,1,23]  # yield会使函数func()变成生成器对象,因此他就具有__iter__方法
    # print(789) # yield会停止函数,当运行下一次next才会继续运行下面的代码
    yield 101112 # 一个yield对应一个next
    # print(131415)

g = func()
for i in g:
    print(i)

また、範囲(10)を開発するために、独自の発電機を使用しようとすることができます

def range(x):
    count = 0
    while count < x:
        yield count
        count += 1

やがて変数のパラメータも完全な範囲を言及して

def range(*args, step=1):
    args = list(args)
    if len(args) == 1:
        count = 0
        while count < args[0]:
            yield count
            count += step
    elif len(args) == 2:
        while args[0] < args[1]:
            yield args[0]
            args[0] += step

ジェネレータ式

# 把列表推导式的[]换成()
lt = [i for i in range(10000000)]
print(lt)
g = (i for i in range(10000000))
print(g)
print(g.__next__())

リストとタプルの違い:リストは、タプルは(スペースを節約するために)古い鶏の卵のバスケットです

無名関数

名前のない定義、機能によって、匿名関数、

ラムダキーワードは、匿名を必要とします

# lambda 参数:<代码块>

f = lambda x: x+1
res = f(1)
print(res)

匿名関数一般的に単独で使用されていない,,および組み込みに関連付けられたフィルタ()/マップ()/ソート()/リストソート()メソッド

salary_dict = {
    'nick': 3000,
    'jason': 100000,
    'tank': 5000,
    'sean': 2000
}
salary_list = list(salary_dict.items())
print(salary_list)  # [('nick', 3000), ('jason', 100000), ('tank', 5000), ('sean', 2000)]

このようなコードは、仕分け用の組み込みメソッドならば、それだけでキーでソートすることができます

名前の関数ならば、それはソートされている値の値のために行うことができますが、それは多くの問題だろう

あなたは匿名関数を使用している場合、それは単に多くの意志

def func(i):  # i = ('sean', 2000), ('nick', 3000),('tank', 5000),('jason', 100000)
    return i[1]  # 2000,3000,5000,100000
    
salary_list.sort(key=lambda i: i[1])  # 内置方法是对原值排序
# 按照func的规则取出一堆元素2000,3000,5000,100000
# 然后按照取出的元素排序
print(salary_list)

おすすめ

転載: www.cnblogs.com/hyc123/p/11348558.html