我有两个包含以下值的列表
List1=['6', '9', '16', '19', '0', '3', '6', '0', '6', '12', '18']
List2=['9', '16', '19', '24', '3', '6', '19', '6', '12', '18', '24']
下面是来自我的python代码的循环,其中if条件没有 idk为60时工作,时间= 60/60 = 1k
在这种情况下,当list1k为'0'且列表2为'3'时,它应该进入if条件。但是if
条件不起作用。我也尝试使用以下表达式:
if ((time >=List1[i]) and (time <=List2[i])):
这是代码:
for id in range(60,63):
time = id/ 60
for i in range(0, len(List1) - 1):
if (((time >List1[i])or(time==List1[i])) and ((time <List2[i])or(time==List2[i]))):
print "inside IF"
答案 0 :(得分:8)
您正在比较字符串和整数。数字始终在字符串前排序,因此time
始终低于List1[i]
和List2[i]
。
在列表中使用整数:
List1 = [6, 9, 16, 19, 0, 3, 6, 0, 6, 12, 18]
List2 = [9, 16, 19, 24, 3, 6, 19, 6, 12, 18, 24]
Python 2尝试使所有东西都可以订购,这就是为什么比较字符串和整数是合法的,但这也意味着你可以犯这样的错误。 Python 3删除了这个目标,并试图将字符串与这样的整数进行比较,而不是引发错误。
请注意,您还使用整数除法,因为/
除法运算符的两个操作数都是整数。您可能希望使用浮点除法:
time = id / 60.0
虽然我不完全确定你对该部门的期望是什么。对于整数除法,60 / 60
,61 / 60
和62 / 60
的结果始终为1
。
您的if
表达式可以通过比较链简化:
if List1[i] <= time <= List2[i]:
您可以使用zip()
功能配对两个列表中的值:
for id in range(60, 63):
time = id / 60.0
for lower, higher in zip(List1, List2):
if lower <= time <= higher:
print 'inside if with lower={}, higher={}, time={}'.format(lower, higher, time)
输出:
>>> List1 = [6, 9, 16, 19, 0, 3, 6, 0, 6, 12, 18]
>>> List2 = [9, 16, 19, 24, 3, 6, 19, 6, 12, 18, 24]
>>> for id in range(60, 63):
... time = id / 60.0
... for lower, higher in zip(List1, List2):
... if lower <= time <= higher:
... print 'inside if with lower={}, higher={}, time={}'.format(lower, higher, time)
...
inside if with lower=0, higher=3, time=1.0
inside if with lower=0, higher=6, time=1.0
inside if with lower=0, higher=3, time=1.01666666667
inside if with lower=0, higher=6, time=1.01666666667
inside if with lower=0, higher=3, time=1.03333333333
inside if with lower=0, higher=6, time=1.03333333333
答案 1 :(得分:0)
尝试:
python2
>>> int < str
True
这是因为您要比较整数和字符串,请参阅Built-in Types:
除数字外的不同类型的对象按其类型排序 名称;不支持正确比较的相同类型的对象 按地址排序 这在Python3中被“修复”:
这在Python3中已“修复”:
python3
>>> int < str
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: type() < type()
答案 2 :(得分:0)
问题是因为您正在比较浮点值和字符串值。 time转换为float,List1和List2具有字符串值。要克服此错误,请将List1和List2声明为整数:
List1=[6, 9, 16, 19, 0, 3, 6, 0, 6, 12, 18]
List2=[9, 16, 19, 24, 3, 6, 19, 6, 12, 18, 24]
另外,我在第二个for循环之后的if语句中看到缩进错误。代码应该是:
for id in range(60,63):
time = id/ 60
for i in range(0, len(List1) - 1):
if ((time >=List1[i]) and (time <=List2[i])):
print("inside IF")
它应该适用于这些变化。
考虑以下对代码的修改,但不是必需的。
使用上面的代码,时间将是Python 3.3中的数据类型float(不知道更低版本)。 使用以下语句将其显式转换为整数类型:
time=int(id/60)