1

如何在for循环中制作列表列表?

这是我现在编码的内容:

    a = 0
    xy=[[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]],[[],[]]]
    for liness in range(len(NNCatelogue)):
        a=0
        for iii in range(len(NNCatelogue[liness])):

            while a < len(catid):

                if catid[a]==NNCatelogue[liness][iii]:

                    xyiii = (catid[a], a)
                    xy.append(xyiii)   
                a += 1

正如预期的那样,我得到的输出是一个冗长的对列表。它看起来像下面这样:

     [...,('C-18-1262', 30908),
     ('C-18-1264', 30910),
     ('C-18-1265', 30911),
     ('C-18-1267', 30913),
     ('C-18-1250', 30896),
     ('C-18-1254', 30900),...]

不过,我想将这个对列表转换为对列表。有 1268 次迭代,每个列表的长度应该是 12。(所以 1268 个列表,每个列表有 12 个元素)。在循环中如何解决这个问题的任何想法?

4

3 回答 3

4

可能是这样的。请注意,我直接在列表上使用迭代来节省大量不必要的索引。

xy = []
for line in NNCatelogue:
    l = []
    for c in line:
        for a, ca in enumerate(catid):
            if ca == c:
                l.append((ca, a))
    xy.append(l)

如果您只是使用内部循环来搜索类别索引,我怀疑您是这样,那么字典可能是避免内部循环的有用补充。

于 2012-10-10T15:48:47.393 回答
1

我有一些友好的建议:

  1. 首先,一开始的 a=0 是多余的。您在第一个 for 循环中使用 a=0 执行相同的操作两次。

  2. 其次,为什么要在顶部声明 xy 的列表元素的巨大框架?你可以随时 append() 你需要的东西。

  3. 最后,您的 while 循环只是一个简单的 for 循环:

    for n in range(len(catid)):
    
于 2012-10-10T15:49:49.013 回答
0

您可以使用列表扩展来制作列表列表,如下所示:

list_of_lists = [[j for j in range(0, 3)] for _ in range(0, 3)]

输出一个 3x3 列表:

[ [0, 1, 2], 
  [0, 1, 2], 
  [0, 1, 2]
]
于 2014-05-15T02:11:40.167 回答