2016-11-07 19 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]))