我想计算第二个最后一个数字(x[1]
)与列表中不同项目的其他数字(list
)之间的差异。
在列表的第一项中,它应该是19-13(= 6),19-16和19-19。问题是列表中的项目包含3个或4个(有时是5/6)个数字。
list = [([(13, 400), (14, 700), (19, 700)], 19, 1800),
([(24, 250), (28, 650), (35, 100), (43, 600)], 43, 1600),
([(46, 450), (48, 600), (78, 450)], 78, 1500),
([(79, 650), (88, 400), (92, 600), (96, 50)], 98, 1700)]
1= []
for x in list:
1.append(x[0][0][0])
print "1", 1
2= []
for xin list:
2.append(x[0][1][0])
print "2", 2
3= []
for xin list:
3.append(x[0][2][0])
print "3", 3
4= []
for xin list:
4.append(x[0][3][0])
print "4", 4
time= []
for xin list:
time.append(x[1])
print time
结果:
1 [13, 24, 46, 79]
2 [14, 28, 48, 88]
3 [19, 35, 78, 92]
Traceback (most recent call last):
File "test.py", line 26, in <module>
4.append(order[0][3][0])
IndexError: list index out of range
仅当列表包含少于4个项目的项目时,才会显示错误。因为[3]
中的[0][3][0]
会找到&#34;空项&#34;。
谢谢你nigel222,两个都有效,但我用了你的第一个建议。要创建两个长度相同的列表,我使用了else:function:
for x in list:
if len(x[0]) >= 4:
4.append(x[0][3][0])
else:
fourthorder.append(order[1])
之后我计算了x [1]和4个列表之间的差异,所以if else:使用,x [1] -x [1]给出0.
答案 0 :(得分:1)
两种主要方式:提前测试或处理异常,总是假设您在没有第四项时确切知道该做什么。
先检查:
fourthorder_arrival_of_batch = []
for order in servedbook:
if len( order[0]) > 3:
fourthorder_arrival_of_batch.append(order[0][3][0])
#else:
#append a default value if desired
print "4", fourthorder_arrival_of_batch
处理异常
fourthorder_arrival_of_batch = []
for order in servedbook:
try:
fourthorder_arrival_of_batch.append(order[0][3][0])
except IndexError:
#append a default value if desired, or
pass
print "4", fourthorder_arrival_of_batch
异常应该是不寻常的情况,因为处理的异常比预先进行的简单测试更昂贵。但是,如果少于(例如)10%是例外,那么这很少,如果测试不简单,那么处理异常可能会更有效。