程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python 用于列表匹配条件中的元素大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python 用于列表匹配条件中的元素?

开发过程中遇到Python 用于列表匹配条件中的元素的问题如何解决?下面主要结合日常开发的经验,给出你关于Python 用于列表匹配条件中的元素的解决方法建议,希望对你解决Python 用于列表匹配条件中的元素有所启发或帮助;

我发现自己经常根据某个循环只需要的条件迭代列表的一个子集,并且想知道是否有更有效的方法来编写它。

以列表为例:

foo = [1,2,3,4,5]

如果我想构建一个遍历每个大于 2 的元素的 for 循环,我通常会这样做:

for x in [y for y in foo if y > 2]:
    # Do something

然而,这似乎是多余的,在我看来并不是非常易读。我不认为它的效率特别低,尤其是在使用生成器时,正如@iota 在下面指出的那样,但是我更愿意编写如下内容:

for x in foo if x > 2:
    # Do something

理想情况下避免需要第二个 for 和整个其他临时变量。这有语法吗?我使用 python3,但我认为任何此类语法也可能具有 Python2 变体。

注意:这显然是一个非常简单的例子,可以通过诸如 range() 或排序和切片之类的东西更好地处理,因此假设 foo 是任何必须由任意条件过滤的任意列表

解决方法

不完全是您所追求的语法,但您也可以使用 lambda 使用 filter

for x in filter(lambda y: y > 2,foo):
    print(x)

或者为了可读性而使用函数:

def greaterthantwo(y):
    return y > 2

for x in filter(greaterthantwo,foo):
    print(x)

filter 还具有创建生成器表达式的优点,因此如果您提前退出循环(而不是使用新列表),它不会评估所有值

,

@salparadise 中讨论了过滤器,但您也可以使用生成器:

def filterbyvalue(seq,value):
   for el in seq:
       if el.attribute==value: 
           yield el
           
for x in filterbyvalue(foo,2):
    #Do something

它可能看起来更大,但当你必须做一些复杂的事情而不是过滤时它很有用,它也比首先创建列表理解然后循环它表现得更好。

,

我愿意这样做

为了高效的代码

data = (x for x in foo if x>2)
print(next(data))

更易读的代码

[print(x) for x in foo if x>2]

大佬总结

以上是大佬教程为你收集整理的Python 用于列表匹配条件中的元素全部内容,希望文章能够帮你解决Python 用于列表匹配条件中的元素所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: