根据位置

时间:2017-10-28 05:01:24

标签: python list

所以有一个包含

的列表
'3,2,5,4,1','3,1,2,5,4','2,5,1,4,3'

这些数字是同一个列表的一部分,但它们是列表中的字符串(即列表1)

从此,你说对于“第一行”,3发生在位置0,2发生在位置1,5发生在2等。 对于“第二行”,3发生在位置0,1发生在位置1,2发生在位置2等。

我想创建一个循环或任何东西(除了使用导入的函数)来创建一个看起来像

的最终列表
0: [3, 3, 2]
1: [2, 1, 5]
2: [5, 2, 1]
3: [4, 5, 4]
4: [1, 4, 3]

2 个答案:

答案 0 :(得分:1)

使用Dictionary comprehensionList comprehension的单行代码:

>>> { col:[row[col] for row in l] for col in range(len(l[0])) }
=> {0: [3, 3, 2], 1: [2, 1, 5], 2: [5, 2, 1], 3: [4, 5, 4], 4: [1, 4, 3]}

#driver values:

IN : l = [[3,2,5,4,1], 
          [3,1,2,5,4],
          [2,5,1,4,3]]

向OP注意:通过查看其结构,output建议的是Dictionary。无法以相同的方式定义list

编辑:由于OP的listlist of strings,首先使用list of int将其转换为map,然后继续如上。

>>> l = ['3,2,5,4,1', '3,1,2,5,4', '2,5,1,4,3']

>>> l = [list(map(int,s.split(','))) for s in l]

>>> l
=> [[3, 2, 5, 4, 1], [3, 1, 2, 5, 4], [2, 5, 1, 4, 3]]

答案 1 :(得分:1)

可以使用zip()

简单地转换二维列表
In [1]: l = [[3,2,5,4,1],
   ...:      [3,1,2,5,4],
   ...:      [2,5,1,4,3]]
In [2]: t = list(zip(*l))
In [3]: t
Out[3]: [(3, 3, 2), (2, 1, 5), (5, 2, 1), (4, 5, 4), (1, 4, 3)]

以上述格式输出:

In [4]: for n,line in enumerate(t):
   ...:     print("{}: {}".format(n, list(line)))
   ...:
0: [3, 3, 2]
1: [2, 1, 5]
2: [5, 2, 1]
3: [4, 5, 4]
4: [1, 4, 3]