假设我有两个数组,其中之一是2D。
letters = ['a', 'b', 'c', 'd']
values = [[1, 2, 3, 4], [10, 20, 30, 40]]
现在,我要进行以下分配,以使letters
与values
中的每个列表匹配,如下所示:
a 1
b 2
c 3
d 4
a 10
b 20
c 30
d 40
仅当letters
和values
均为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)
谢谢
答案 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]
编辑:抱歉,已经接受的答案已经做到了。