想象一下我的旧名单是:
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]
等等。
有什么想法吗?
答案 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