允许zip功能将一维映射到二维数组

时间:2018-06-29 17:55:38

标签: python python-3.x

假设我有两个数组,其中之一是2D。

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]

现在,我要进行以下分配,以使lettersvalues中的每个列表匹配,如下所示:

a 1
b 2
c 3
d 4

a 10
b 20
c 30
d 40

仅当lettersvalues均为1D时,以下代码才有效。我该如何解决它以实现我上面想要的任务?

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]
for l, v in zip(letters, values):
    print(l,v)

谢谢

3 个答案:

答案 0 :(得分:3)

您需要遍历两次数据:

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]
for v in values:
  for a, b in zip(letters, v):
    print(f'{a} {b}')
  print()

输出:

a 1
b 2
c 3
d 4

a 10
b 20
c 30
d 40

答案 1 :(得分:1)

如果具有字母和它们匹配的数字的元组对您有用,那么您可以考虑这样做:

for t in zip(letters, *values):
    print(t)

输出:

('a', 1, 10)
('b', 2, 20)
('c', 3, 30)
('d', 4, 40)

如果您的目标是将字母与值列表中的每个对应值相关联,则这比对letters中的每个列表循环遍历values更快。

答案 2 :(得分:1)

您也可以只使用两次zip:

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]
out = list(zip(letters, values[0])) + list(zip(letters, values[1]))

或者为获得更强大的解决方案,您可以遍历值列表中的内容

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]

out = []
[out + list(zip(letters, v)) for v in values]

编辑:抱歉,已经接受的答案已经做到了。