Python 允许zip函数将一维数组映射到二维数组

Python 允许zip函数将一维数组映射到二维数组,python,python-3.x,Python,Python 3.x,假设我有两个数组,其中一个是2D letters = ['a', 'b', 'c', 'd'] values = [[1, 2, 3, 4], [10, 20, 30, 40]] 现在,我想进行以下赋值,以便字母与值中的每个列表匹配,如下所示: a 1 b 2 c 3 d 4 a 10 b 20 c 30 d 40 以下代码仅在字母和值均为1D时有效。我如何修复它以实现上面我想要的任务 letters = ['a', 'b', 'c', 'd'] values = [[1, 2, 3, 4

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

letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]
现在,我想进行以下赋值,以便字母与值中的每个列表匹配,如下所示:

a 1
b 2
c 3
d 4

a 10
b 20
c 30
d 40
以下代码仅在字母和值均为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)

谢谢

您需要在数据上迭代两次:

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

您需要在数据上迭代两次:

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

<>如果你有字母和数字的元组是有用的,你可以考虑这个:

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

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

如果你的目标是将字母与每个值列表中的对应值相关联,这比在值中的每一个列表循环一次的字母要快。

如果你有很多字母和它们匹配的数字是有用的,你可以考虑如下:

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

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

如果您的目标是将字母与值列表中的每个对应值相关联,则这比在值中的每个列表上循环一次字母要快。

您也可以只使用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]

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

您也可以使用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]

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

如果内存/性能不是问题,您可以使用zip[letters]*lenvalues,values中的l,v。如果内存/性能不是问题,您可以使用zip[letters]*lenvalues,values中的l,v。