在for循环中创建列表列表

时间:2017-09-28 20:27:08

标签: python python-2.7 list

我有从{excel文件导入的a1, a2, and a3列表。

W = 4
T = 5
I = 206

a1 = []
for w in range(7, W+7):
    a1.append(ProjectData.col_values(w, 3)[:I])
a2 = []
for w in range(13, W+13):
    a2.append(ProjectData.col_values(w, 3)[:I])
a3 = []
for w in range(19, W+19):
    a3.append(ProjectData.col_values(w, 3)[:I])

如您所见,它们是同一张纸的不同列。我想将这些列表(列)组合在另一个列表中,比如列表a。我正在使用:

a = [a1, a2, a3]

但是,我希望它们是通用的;如果我有a4, a5等,我希望将它们自动添加到列表a中。我可以创建以下可以使用的逻辑:

a = []
for i in range(7, 7+6*T, T+1):
    for w in range(i, W+i):
        .........................

我错过了上述部分,无需创建单独的a1, a2, a3 ....列表即可将所有内容附加到列表中。任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:2)

您可以每次创建一个临时列表并附加它,而不是创建单独的命名列表。

a = []
for i in range(7, 7+6*T, T+1):
    tmp = [] # temporary list
    for w in range(i, W+i):
         tmp.append(ProjectData.col_values(w, 3)[:I])
    a.append(tmp)

答案 1 :(得分:1)

你的循环逻辑设置正确;每次外循环再次运行时,只需创建一个类似a_sub的列表,然后将值附加到内循环中的子列表,然后将子列表附加到外循环末尾的a。试试这个:

a = []
for i in range(7, 7+6*T, T+1):
    a_sub = []
    for w in range(i, W+i):
        a_sub.append(ProjectData.col_values(w, 3)[:I])
    a.append(a_sub)

可替换地:

a = []
for i in range(7, 7+6*T, T+1):
    a.append([]) # Append an empty list
    for w in range(i, W+i):
        a[-1].append(ProjectData.col_values(w, 3)[:I]) # a[-1] is the last element of a, which is the sublist you just created

可替换地:

a=[[ProjectData.col_values(w+i,3)[:I]for w in range(W)]for i in range(7,7+6*T,T+1)] # Don't use this because it's unreadable

如果您喜欢最后一个,请将其用于可读性

a = [[ProjectData.col_values(w, 3)[:I] for w in range(i, W + i)] for i in range(7, 7 + 6 * T, T + 1]

稍微长一点,但这不是代码高尔夫你知道的:P我建议亲自使用第二个。

虽然是一名代码高尔夫球手,但有时会在我的代码中看到像第三个这样的东西......:P

答案 2 :(得分:1)

a = []
for i in range(7, 7+6*T, T+1):
    for w in range(i, W+i):
        a.append(ProjectData.col_values(w, 3)[:I])

append将一个项目添加到列表a。在这种情况下,项目是一个列表。如果你这样做三次,它会添加三个列表。然后a [1] =列表a1。

您无需将列表分配给temp var即可将其添加到a