ホームページ  >  記事  >  バックエンド開発  >  Pythonのデータ変換と変換を同時に行う方法の紹介と分析(例付き)

Pythonのデータ変換と変換を同時に行う方法の紹介と分析(例付き)

不言
不言転載
2018-11-26 16:35:361940ブラウズ

この記事が提供するのは、Python のデータの変換と変換を同時に行う方法の紹介と分析です (例付き)。一定の参考値があり、必要な友人はそれを参照できます。 . お役に立てれば幸いです。

1. 要件

変換関数 (sum()、min()、max() など) を呼び出す必要がありますが、まず、データまたはフィルター

2. ソリューション

データ変換と変換を組み合わせた、関数パラメーターでジェネレーター式を使用する非常に洗練されたソリューションがあります。

例 1: 二乗和を計算する:

nums=[1,2,3]
s=sum(x*x for x in nums)
print(s)

結果:

14

例 2: .py ファイルが指定されたディレクトリに存在するかどうかを確認する

import os
filename=os.path.dirname(os.path.abspath(__file__))
files1=os.listdir(filename+"/image")
files2=os.listdir(filename)
#any表示该iterable只要存在一个满足条件的,欧返回True,否则才返回False
if any(name.endswith('.py') for name in files1):
    print('存在py文件')
else:
    print('不存在py文件')
#any表示该iterable只要存在一个满足条件的,欧返回True,否则才返回False
if any(name.endswith('.py') for name in files2):
    print('存在py文件')
else:
    print('不存在py文件')

実行結果:

不存在py文件
存在py文件

例 3: 辞書内のキーに基づいて最小値を取得

marks=[
    {'age':18,'money':100},
    {'age':19,'money':500},
    {'age':17,'money':900},
    {'age':20,'money':1000},
]
min_mark=min(m['age'] for m in marks)
print(min_mark)

結果:

17

3. 分析

これ このソリューションは、ジェネレーター式を別の引数として関数に渡すときの構文上の微妙な点の一部を示しています (つまり、シンボルを再利用する必要がありません)。たとえば、次の 2 行のコードは同じ意味です。

s=sum((x*x for x in nums))
s=sum(x*x for x in nums)

最初に一時テーブルを作成する場合と比較して、ジェネレータをパラメータとして使用する方が、通常はより効率的で洗練された方法です。たとえば、ジェネレータ式を使用していない場合は、二乗和を計算する次の方法を検討してください。

nums=[1,2,3]
s=sum([x*x for x in nums])
print(s)

これも機能しますが、追加の手順が発生し、追加のリストが作成されます。小さなリストの場合。それは問題ではありませんが、nums が非常に大きい場合、巨大な一時データ構造が作成され、1 回だけ使用され、その後破棄されます。

ジェネレーター ベースのソリューションは、データを反復的に変換するため、メモリ使用効率が大幅に向上します。

min() や max() などの特定の変換関数はキー パラメーターを受け入れることができるため、ジェネレーターを使用したい場合に役立ちます。たとえば、上記の例 [辞書内のキーに基づいて最小値を取得する] では、次の代替案を検討できます:

min_mark=min(marks,key=lambda m:m['age'])

以上がPythonのデータ変換と変換を同時に行う方法の紹介と分析(例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。