3つの解決策|forループをやめてPythonコードをよりスムーズに!

コードに for ループを記述しないことに挑戦する理由は何ですか? これにより、より高度で慣用的な文法やライブラリを使用することを学ばざるを得なくなる可能性があるためです. この記事では、python を例として使用して、誰もが他の人のコードで見たことがあるが、自分で使用することはめったにない多くの構文について説明します。

Python のすばらしい言語機能を調べ始めてからしばらく経ちました。最初は、他のプログラミング言語でのプログラミング経験よりも多くの Python 言語機能を練習することに挑戦しました。これにより、物事はますます面白くなります!コードはますます簡潔になり、コードはより構造化され、正規化されたように見えます。以下にこれらの利点について説明します。

通常、for ループは次の使用シナリオで使用されます。

  • 一連の情報を抽出します。
  • 別のシーケンスからシーケンスを生成します。
  • のために書くことは習慣になっています。

幸いなことに、Python にはこれを行うのに役立つツールがすでにたくさんあります。気を変えて別の方法で考える必要があるだけです。
for ループの記述を避けることで得られるもの:

  • より少ないコード
  • コードの可読性の向上
  • インデントが少ない (Python では意味があります)

次のコード構造を見てみましょう。

# 1
with ...:
    for ...:
        if ...:
            try:
            except:
        else:

この例では、読みにくい複数レベルのネストされたコードを扱っています。この例では、複数レベルのネストされたコードを使用しています。このコードでは、インデントを無差別に使用して、管理ロジック (with、try-except) とビジネス ロジック (for、if) を混在させていることがわかりました。管理ロジックにのみインデントを使用するという規則に従えば、コア ビジネス ロジックがすぐに発生するはずです。

「ネストされた構造よりもフラットな構造の方が優れている」 - The Zen of Python

既存のツールを使用して for ループを置き換えることができます

1. リスト内包表記 / ジェネレーター式

簡単な例を見てみましょう。ある配列を別の配列に変換する場合:

result = []
for item in item_list:
    new_item = do_something_with(item)
    result.append(item)

MapReduce が好きなら、Python で map や List Comprehension を使うこともできます:

result = [do_something_with(item) for item in item_list]

同様に、配列内の要素を反復処理するだけの場合は、同じコードのジェネレータ式を使用できます。結果 = (item_list の項目の do_something_with(item))

2.機能

ある配列を別の配列にマップする場合は、 map 関数を呼び出すだけで、より高度で機能的なプログラムによる方法でこの問題を解決できます。

doubled_list = map(lambda x: x * 2, old_list)

シーケンスを 1 回の使用に減らしたい場合は reduce

from functools import reduce
summation = reduce(lambda x, y: x + y, numbers)

また、Python の組み込み関数の多くはイテラブルを使用します。

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> all(a)
False
>>> any(a)
True
>>> max(a)
9
>>> min(a)
0
>>> list(filter(bool, a))
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> set(a)
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> dict(zip(a,a))
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9}
>>> sorted(a, reverse=True)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> str(a)
'[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'
>>> sum(a)
45```
## 3.Extract Functions or Generators
上述两种方法是很好的处理更简单的逻辑。更复杂的逻辑怎么样?作为程序员,我们编写函数来抽离出复杂的业务。相同的想法适用于此。如果你是这样写的:

results = []
for item_list:
# セットアップ
# 条件
# 処理
# 計算
results.append(result)

显然你对一个代码块添加了太多的责任。相反,我建议你做:

def process_item(item):
# 設定
# 条件
# 処理
# 計算
結果を返す

results = [item_list のアイテムの process_item(item)]

如果换成嵌套函数会如何

results = []
for i in range(10):
for j in range(i):
results.append((i, j))

これを実現するために、リスト内包表記に置き換えます。

results = [(i, j)
for i in range(10)
for j in range(i)]

如果你的代码块需要记录一些内部状态

現在のアイテムの前の最大値を見つける

a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
results = []
current_max = 0
for i in a:
current_max = max(i, current_max)
results.append(current_max)

結果 = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

我们使用 generator 来实现这一点:

def max_generator(numbers):
current_max = 0
for i for numbers:
current_max = max(i, current_max)
yield current_max

a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
結果 = リスト (max_generator(a))

读者可能要问 “等等!你在 generator 中用到 for 循环,作弊啊!别急,再看看下面的代码。

不要自己写。itertools 会帮你实现了

这个模块很简单。我相信这个模块在大多数场景中可以替换你原先的 for 循环。例如,最后一个例子可以重写为:

from itertools import 蓄積
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resutls = list(accumulate(a, max))

另外,如果要迭代组合序列,则需要使用product(), permutations(), combinations()。
## 结论
在大多数情况下,您都不需要编写 for 循环。

你应该避免编写 for 循环,这样会有更好的代码可读性。
## 最后
**在学习python中有任何困难不懂的可以微信扫描下方CSDN官方认证二维码加入python交流学习
多多交流问题,互帮互助,这里有不错的学习教程和开发工具。**
(**python兼职资源+python全套学习资料**)
![](https://img-blog.csdnimg.cn/867bb53dbbe84f93a91b19c808a6c057.png#pic_center)
## 一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a6067e55c54b49078778d56ea0db7fe2.png)
## 二、Python必备开发工具
![在这里插入图片描述](https://img-blog.csdnimg.cn/e496e6652efd47f5bbe73ad2ee082d4a.png)
## 四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
![在这里插入图片描述](https://img-blog.csdnimg.cn/c6ac9e53d20b448ab9f2837b7f173b94.png)
## 五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。![在这里插入图片描述](https://img-blog.csdnimg.cn/7b7d7e133d984b85a09422c3ccfa7396.png)
## 六、Python练习题
检查学习结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f10f8ee9d86444cb922630d860eb83c0.png)

## 七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bc34f19a6284446a45ca0ed8c7af18c.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/f27ac0a91ff7409185baa289eade9e1d.png)
**最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。**





おすすめ

転載: blog.csdn.net/m0_59162248/article/details/128217577#comments_24942153