2016-11-07 62 views
0

这里有两个列表:如何分解并在Python中打印两个列表的列表?

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

既然你只需要打印的价值观,而不是建立一个列表,你应该使用for循环,而不是列表理解。然后你还需要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 
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) 
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)])) 
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]))