循环到列表理解

时间:2017-06-27 08:10:08

标签: python loops list-comprehension

我怎么没有从这个循环得到相同的结果..

   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),
 ......]

2 个答案:

答案 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):])