3 soluciones | ¡Abandone el bucle for y haga que el código de Python sea más fluido!

¿Por qué desafiarse a no escribir for loop en su código? Porque esto puede obligarte a aprender a usar una gramática o biblioteca más avanzada e idiomática. El artículo usa python como ejemplo para hablar sobre una gran cantidad de sintaxis que todos han visto en el código de otras personas, pero que rara vez usan ellos mismos.

Ha pasado un tiempo desde que comencé a explorar las increíbles características del lenguaje en Python. Al principio, me desafié a mí mismo a practicar más funciones del lenguaje Python que la experiencia que tenía en programación en otros lenguajes de programación. ¡Esto hace que las cosas se vuelvan cada vez más interesantes! El código se vuelve cada vez más conciso y parece más estructurado y normalizado. Describiré estos beneficios a continuación.

Por lo general, el bucle for se usa en los siguientes escenarios de uso:

  • en una secuencia para extraer alguna información.
  • Generar una secuencia a partir de otra secuencia.
  • Escribir para se ha convertido en un hábito.

Afortunadamente, Python ya tiene muchas herramientas que pueden ayudarlo a hacer esto, solo necesita cambiar de opinión y pensar de manera diferente.
¿Qué gana al evitar escribir bucles for?

  • menos código
  • mejor legibilidad del código
  • Menos sangría (todavía tiene sentido para Python)

Echemos un vistazo a la siguiente estructura de código:

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

En este ejemplo, estamos tratando con varios niveles de código anidado, que es difícil de leer. Este ejemplo usa varios niveles de código anidado. Encontré en este código que utiliza la sangría indiscriminadamente para mezclar la lógica de gestión (con, probar-excepto) con la lógica empresarial (para, si). Si sigue la convención de usar solo sangría para la lógica administrativa, entonces la lógica comercial central debería surgir de inmediato.

"Las estructuras planas son mejores que las estructuras anidadas" - The Zen of Python

Las herramientas existentes se pueden usar para reemplazar el bucle for

1. Comprensión de lista / Expresión generadora

Veamos un ejemplo sencillo. Si desea convertir una matriz a otra:

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

Si te gusta MapReduce, también puedes usar map o List Comprehension en Python:

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

De manera similar, si solo desea iterar sobre los elementos de la matriz, puede usar el mismo código Generator Expression. resultado = (hacer_algo_con(elemento) para elemento en lista_elemento)

2. Función

Si desea mapear una matriz en otra matriz, puede resolver este problema de una manera programática más avanzada y funcional simplemente llamando a la función map.

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

Si desea reducir una secuencia a un solo uso, reduzca

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

Además, muchas de las funciones integradas de Python usan iterables:

>>> 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
上述两种方法是很好的处理更简单的逻辑。更复杂的逻辑怎么样?作为程序员,我们编写函数来抽离出复杂的业务。相同的想法适用于此。如果你是这样写的:

resultados = []
para elemento en item_list:
# configuraciones
# condición
# procesamiento
#
resultados de cálculo.append(resultado)

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

def process_item(elemento):
# configuraciones
# condición
# procesamiento
# cálculo
devolver resultado

resultados = [proceso_elemento(elemento) para elemento en item_list]

如果换成嵌套函数会如何

resultados = []
para i en rango (10):
para j en rango (i):
resultados.append ((i, j))

Reemplazado con Comprensión de lista para lograr esto:

resultados = [(i, j)
para i en el rango (10)
para j en el rango (i)]

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

encontrar el máximo antes del elemento actual

a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resultados = []
max_actual = 0
para i en a:
max_actual = max(i, max_actual)
resultados.append(max_actual)

resultados = [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]

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

def max_generator(numbers):
current_max = 0
for i en números:
current_max = max(i, current_max)
yield current_max

a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resultados = lista (max_generator (a))

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

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

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

desde itertools importar acumular
a = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
resultados = lista (acumular (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)
**最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。**





Supongo que te gusta

Origin blog.csdn.net/m0_59162248/article/details/128217577#comments_24942153
Recomendado
Clasificación