2016-08-12 53 views
1

想象我的旧名单相同的指标是:我有一个列表的列表。我想提出名单的一个新的列表,但每个新列表都会有老的名单

old = [[card, towel, bus], [mouse, eraser, laptop], [pad, pen, bar]] 

目标:

new = [[card, mouse, pad], [towel, eraser, pen], [bus, laptop, bar]] 

事情我已经尝试:

new = dict(zip(old[i] for i in range(len(old)))) 

new = [old[i][0] for i in old] #trying just to get a list of first indices, and then go from there 

我觉得这是一个微不足道的问题,但我有麻烦。提前感谢您指点我正确的方向!

另外: 想象我有另外一个列表:

list_names = ['list1', 'list2', 'list3'] 

我想这个列表的内容设置为新列表的每一个:

​​

等。

任何想法?

+2

的[移调在Python矩阵(http://stackoverflow.com/questions/17037566/transpose-a-matrix-in-python) – soon

+2

新=拉链(*旧) – Julien

+0

关于第二个可能的复制问题,这将做动态变量查找,这可能不是一个好主意。可以用'list = [locals()[name] for list_names]''来实现。 – pistache

回答

3

关于第一个问题,这是zip的基本用法:

>>> old = [['card', 'towel', 'bus'], ['mouse', 'eraser', 'laptop'], ['pad', 'pen', 'bar']] 
>>> zip(*old) 
[('card', 'mouse', 'pad'), ('towel', 'eraser', 'pen'), ('bus', 'laptop', 'bar')] 

我不明白你的第二个问题。

0

方法1:如果你想在一行达到你的第一个目标,并希望使用列表理解尝试:

old = [[1,2,3],[4,5,6],[7,8,9]] 
new = [[sublist[i] for sublist in old ] for i in (0,1,2)] 

导致new = [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

方法2:然而,你也可以使用zip -function是这样的:

new = [list for list in zip(*old)] 

会导致new = [(1, 4, 7), (2, 5, 8), (3, 6, 9)]。请注意,这是与第一个示例相反的元组列表。

0

非常感谢大家的意见! ZIP(*旧)工作就像一个魅力,虽然我不能完全肯定

对于第二个问题是如何......,我用这个(我知道这是不是一个很好的解决方案,但它的工作)

for name in range(input_num): 
    exec(list_names[name] + ' = arranged_list[name]')