给定 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 (就像你在数学课上写的那样)。
