如何取出列表数据?

时间:2016-10-12 11:43:46

标签: python list range

我想计算第二个最后一个数字(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.

1 个答案:

答案 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%是例外,那么这很少,如果测试不简单,那么处理异常可能会更有效。