2017-04-11 69 views
1

我有3個不同長度的列表。在Python中製作相同大小的列表

我想用「X」附加較短的列表,並使大小等於最長列表的長度。

A = [10,20,30,40,50] 
B = ["A", "B", "C"] 
C = ["X1", "X2"] 

追加 「X」 後,它應該是這樣的:

A = [10,20,30,40,50] 
B = ["A", "B", "C", "X","X"] 
C = ["P1", "P2", "X", "X", "X"] 

我用下面的代碼實現它,

for i, a in enumerate(A): 
    if i < len(B): 
     ; 
    else: 
     B.append('X') 

我如何能做到這一點有效在python中?

+0

你不應該使用分號,如果你不需要做任何事情 - 用'pass'或只是不寫這個塊 –

回答

1

計算每個列表的最大長度並附加增量。

在Python中,List有一個二進制運算符+將多個列表連接在一起,以及*來拼貼。

A = [10,20,30,40,50] 
B = ["A", "B", "C"] 
C = ["X1", "X2"] 
max_length = max(max(len(A), len(B)), len(C)) 
A += ['X'] * (max_length - len(A)) 
B += ['X'] * (max_length - len(B)) 
C += ['X'] * (max_length - len(C)) 

然後使用容器列表來組織它們,以減少重複代碼和更好的擴展性。

A = [10,20,30,40,50] 
B = ["A", "B", "C"] 
C = ["X1", "X2"] 

arrays = [A, B, C] 
max_length = 0 
for array in arrays: 
    max_length = max(max_length, len(array)) 

for array in arrays: 
    array += ['X'] * (max_length - len(array)) 

結果:

print(A) # [10, 20, 30, 40, 50] 
print(B) # ['A', 'B', 'C', 'X', 'X'] 
print(C) # ['X1', 'X2', 'X', 'X', 'X'] 
+1

'max'可與任何非空序列工作集裝箱 –

0

嘗試使用max()來獲得最大的長度,然後添加列表BC

如果你想與P更換X,您可以使用列表理解[i.replace('X','P') for i in C]獲得['P1','P2']

>>> m=max(len(A),len(B),len(C)) 
>>> B+['X']*(m-len(B)) 
['A', 'B', 'C', 'X', 'X'] 
>>> [i.replace('X','P') for i in C]+['X']*(m-len(C)) 
['P1', 'P2', 'X', 'X', 'X'] 
4

使用extend方法

B.extend(['X'] * (len(A)-len(B))) 
2

寫入功能,使這個爲你

A = [10, 20, 30, 40, 50] 
B = ["A", "B", "C"] 
C = ["X1", "X2"] 


def extend_with_extra_elements(*some_lists): 
    max_some_lists_length = max(map(len, some_lists)) 
    for some_list in some_lists: 
     extra_elements_count = max_some_lists_length - len(some_list) 
     extra_elements = ['X'] * extra_elements_count 
     yield some_list + extra_elements 


A, B, C = extend_with_extra_elements(A, B, C) 

足夠高效

1

python itertools模塊有許多漂亮的函數,適用於這種情況。例如:

>>> from itertools import izip_longest, izip 
>>> A = [10, 20, 30, 40, 50] 
>>> B = ["A", "B", "C"] 
>>> C = ["X1", "X2"] 
>>> A, B, C = (list(x) for x in (izip(*izip_longest(A, B, C, fillvalue='X')))) 
>>> A 
[10, 20, 30, 40, 50] 
>>> B 
['A', 'B', 'C', 'X', 'X'] 
>>> C 
['X1', 'X2', 'X', 'X', 'X'] 
相關問題