Python:列表的输出格式

时间:2014-08-20 12:14:58

标签: python list python-2.7

我有温度测量列表:

temp = [ [39, 38.5, 38], [37,37.5, 36], [35,34.5, 34], [33,32.5, 32], [31,30.5, 30], [29,28.5, 28], [27,26.5,26] ]

每隔5小时,每隔5小时记录一次。第一天是第一个临时列表:  [39, 38.5, 38],第二天是第二个临时列表:[37, 37.5, 36]等。

我总是这样做,我循环'temp'并计算值之间的时差并将其保存为时间列表。 (时差总是5h)

time=[]
for t in temp:
 for i,val in enumerate(t):
         i=i*5
         time.append(i)
print time

输出如下:

time: [0, 5, 10, 0, 5, 10, 0, 5, 10, 0, 5, 10, 0, 5, 10, 0, 5, 10, 0, 5, 10]

但我希望每天获得一份子列表,例如:

time: [ [0, 5, 10] , [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10] ]

我的代码有什么问题?

5 个答案:

答案 0 :(得分:2)

您继续追加到同一个列表,您应该每天创建一个新列表。

time=[]
for t in temp:
    day_list = [] # Create a new list
    for i,val in enumerate(t):
        i=i*5
        day_list.append(i) # Append to that list
    time.append(day_list) # Then append the new list to the output list
print time

列表理解:

time = [[i*5 for i, val in enumerate(t)] for t in temp]

答案 1 :(得分:2)

您将所有时间戳附加到单级列表中,以便您的算法输出。

以下是获取列表列表的一种方法:

>>> [list(range(0, len(t) * 5, 5)) for t in temp]
[[0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10], [0, 5, 10]]

这正确地处理了temp可能具有不同长度的子列表。

答案 2 :(得分:0)

如果您想在每个列表中使用完全相同的内容,请执行以下操作:

time = [[0,5,10] for _ in temp]

考虑变量子列表长度:

在python 2中

time = [range(0, len(i)*5, 5) for i in temp]

在python 3中,必须具体化范围:

time = [list(range(0, len(i)*5, 5)) for i in temp]

答案 3 :(得分:0)

您必须创建一个临时子列表,然后将该子列表附加到实际列表中以获取列表中的一组子列表

temp = [ [39, 38.5, 38], [37,37.5, 36], [35,34.5, 34], [33,32.5, 32], [31,30.5, 30], [29,28.5, 28], [27,26.5,26] ]
time=[]
for t in temp:
    l = []
    for i,val in enumerate(t):
        i=i*5
        l.append(i)
        if len(l) == 3:
            time.append(l)
print time

答案 4 :(得分:0)

使用列表理解,您可以在一行中完成:

time = [[i*5 for i, val in enumerate(t)] for t in temp]