我怎么没有从这个循环得到相同的结果..
for i in range(0,len(irradiance_list_bytes),28):
dardy= struct.unpack("qHHHHfff",irradiance_list_bytes[i:i+28])
当我将它转换为这样的列表理解时......
dardy=[struct.unpack("qHHHHfff",irradiance_list_bytes[i:i+28]) for i in range(0,len(irradiance_list_bytes),28)]
循环的结果是:
dardy
Out[55]:
(631810591,
32,
12,
1,
100,
146.53225708007812,
-4.72298002243042,
-7.121456623077393)
理解列表的结果是:
dardy
Out[57]:
[(629816865,
32,
12,
1,
100,
143.21139526367188,
-3.786829710006714,
-6.368762016296387),
(630014820,
32,
12,
1,
100,
143.46746826171875,
-3.9606733322143555,
-6.6814117431640625),
(630213227,
32,
12,
1,
100,
143.42613220214844,
-3.992025136947632,
-6.901387691497803),
......]
答案 0 :(得分:1)
取最后一个值:
dardy=[struct.unpack("qHHHHfff",irradiance_list_bytes[i:i+28]) for i in range(0,len(irradiance_list_bytes),28)][-1]
答案 1 :(得分:1)
您无需构建列表或使用 for 循环来获取最后一个项目片段。
当 stride 值为28时,使用mod运算符计算最后一个切片的起始索引。如果列表长度是28,则减去28长度,否则从长度中减去长度 mod
28 :
l = len(irradiance_list_bytes)
dardy= struct.unpack("qHHHHfff", irradiance_list_bytes[l - (l%28 or 28):])