如何在Python中分解和打印两个列表列表?

时间:2016-11-07 21:25:47

标签: python list printing tuples

以下是两个清单:

a_value = [[0.234, 0.88,0.98],[0.923,0.777,0.87],[0.77,0.98,0.89]]
b_value = [[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)]]

我需要加入这两个列表,以便输出打印为:

Set1
b_value (1,1) = a_value 0.234
b_value (1,2) = a_value 0.88
b_value (1,3) = a_value 0.98
Set2
b_value (1,1) = a_value 0.923
b_value (1,2) = a_value 0.777
b_value (1,3) = a_value 0.87
Set 3
b_value (1,1) = a_value 0.77
b_value (1,2) = a_value 0.98
b_value (1,3) = a_value 0.89

我尝试过的代码如下:

print("\n".join([('b_value{} a_value={}'.format(i,j)) for i,j in zip(b_value,a_value)]))

输出:

b_value[(1, 1), (1, 2), (1, 3)] a_value=[0.234, 0.88, 0.98]
b_value[(1, 1), (1, 2), (1, 3)] a_value=[0.923, 0.777, 0.87]
b_value[(1, 1), (1, 2), (1, 3)] a_value=[0.77, 0.98, 0.89]

我不确定如何修改代码,以便分解列表列表并将它们分成"集"。

4 个答案:

答案 0 :(得分:4)

由于您只需要打印值而不是构建列表,因此您应该使用for循环而不是 list comprehension 。然后你还需要在嵌套循环中zip 子列表来并排放置他们的项目:

for idx, (i ,j) in enumerate(zip(b_value,a_value), 1):
    print("Set{}".format(idx))
    for a,b in zip(i,j):
        print('b_value {} = a_value {}'.format(a,b))
Set1
b_value (1, 1) = a_value 0.234
b_value (1, 2) = a_value 0.88
b_value (1, 3) = a_value 0.98
Set2
b_value (1, 1) = a_value 0.923
b_value (1, 2) = a_value 0.777
b_value (1, 3) = a_value 0.87
Set3
b_value (1, 1) = a_value 0.77
b_value (1, 2) = a_value 0.98
b_value (1, 3) = a_value 0.89

答案 1 :(得分:4)

您需要展平两个列表,如果您想在一行中执行此操作,请使用itertools.chain

from itertools import chain

a_value = [[0.234, 0.88,0.98],[0.923,0.777,0.87],[0.77,0.98,0.89]]
b_value = [[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)]]

print("\n".join([('b_value{} a_value={}'.format(i,j)) for i,j in zip(chain.from_iterable(b_value),chain.from_iterable(a_value))]))

但是,如果您需要更快的扁平化方法,请使用一些额外的行:

a_value = [[0.234, 0.88,0.98],[0.923,0.777,0.87],[0.77,0.98,0.89]]
b_value = [[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)]]

flat_a = [item for sublist in a_value for item in sublist]
flat_b = [item for sublist in b_value for item in sublist]

print("\n".join([('b_value{} a_value={}'.format(i,j)) for i,j in zip(flat_b,flat_a)]))

答案 2 :(得分:2)

看起来你的格式化部分还可以,但无法正确组合列表。为什么不先把它们弄平?

a = [[0.234, 0.88,0.98],[0.923,0.777,0.87],[0.77,0.98,0.89]]
b = [[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)],[(1,1),(1,2),(1,3)]]

flat_a = [item for sublist in a for item in sublist]
flat_b = [item for sublist in b for item in sublist]
zip(flat_a, flat_b)

答案 3 :(得分:1)

我不知道你想要这个代码有多普遍,但这打印出来的想要你想要我想:

for myset in zip(a_value,b_value):
    for i in range(len(myset) + 1):
        print("b_value " + str(myset[1][i]) + " = a_value " + str(myset[0][i]))