簡體   English   中英

在 Python 中制作相同大小的列表

[英]Making equal size lists in Python

我有 3 個不同的長度不等的列表。

我想用“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):
        pass
    else:
        B.append('X')

我怎樣才能在 python 中有效地做到這一點?

使用extend方法

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

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

在 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']

編寫為您制作此功能的函數

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)

足夠高效

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']

嘗試使用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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM