我有一份清单清单。我想创建一个新的列表列表,但每个新列表将具有旧列表的相同索引

时间:2016-08-12 15:52:21

标签: python list

想象一下我的旧名单是:

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']

我想将此列表的元素设置为每个新列表:

list1 = [card, mouse, pad] 

等等。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

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

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

我无法理解你的第二个问题。

答案 1 :(得分: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 - 这样的功能:

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

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

答案 2 :(得分:0)

非常感谢大家的投入! zip(* old)就像一个魅力,虽然我不完全确定如何......

对于第二个问题,我使用了这个:(我知道这不是一个好的解决方案,但它有效)

@Input() input