Skip to main content
 首页 » 编程设计

python之使用默认回退选项过滤列表值

2025年05月04日11fff_TT

给定 2 个数字列表:

real_solutions_sols1 =  [-53.2909210236, -8.31658000998, 1.87689837129, 1.4] 
real_solutions_sols2 =  [-21.1439685227, -19.2] 

我想要相同的代码来重写列表,以便它们包含 0.1 和 4.0 之间的数字:

real_solutions_sols1 =  [ 1.87689837129, 1.4] 

对于第二个列表,这是不可能的,所以我希望代码返回完整的列表:

real_solutions_sols2 =  [-21.1439685227, -19.2] 

以下代码适用于 real_solutions_sols2:

real_roots_zero_to_four = [] 
for i in real_solutions_sols2: 
   if (i >= 0.1) and (i <= 4.0): 
      real_roots_zero_to_four.append(i) 
   else: 
     real_roots_zero_to_four = real_solutions_sols2 
 
print 'real_roots_zero_to_four = ', real_roots_zero_to_four 

if条件不满足,所以我们跳转到else语句。

real_roots_zero_to_four = [-21.14396852, -19.2]

但是,对于第一个列表,它会无限循环:

real_roots_zero_to_four = [] 
for i in real_solutions_sols1: 
   if (i >= 0.1) and (i <= 4.0): 
      real_roots_zero_to_four.append(i) 
   else: 
     real_roots_zero_to_four = real_solutions_sols1 
 
print 'real_roots_zero_to_four = ', real_roots_zero_to_four 

我不知道为什么会这样

请您参考如下方法:

您可以使用以下惯用语\模式:

my_list = [x for x in my_list if 0.1 <= x <= 4] or my_list 

这里发生的是我们正在利用逻辑 or 的方式与 Python 中列表的 bool 性质相结合。

详细来说,假设我们有:

<exp 1> or <exp 2> 

Python 解释器将评估 or 的左侧 上的任何内容的真实性第一的。如果该检查返回 True , <exp 1>返回(不 True )。否则,<exp 2>无论其未检查的真实性 值如何,都会返回。利用 bool([]) 的事实返回 False我们可以确定,如果我们的列表理解返回一个空列表,or 的右侧将被返回(原始列表 my_list )。

因此,我们正在做的是优雅地说出以下内容:

给定 my_list , 获取其所有满足 if 的元素除非没有任何条件,否则只返回原始条件。


您的代码中的问题是使用 &这不意味着and在 Python 中。逻辑 AND是and所以相反,你应该做 if (i >= 0.1) and (i <= 4.0):

最后,请注意在 Python 表达式中,如 i >= 0.1 and i <= 4.0可以“浓缩”成0.1 <= i <= 4.0 (就像你在数学课上写的那样)。