簡體   English   中英

迭代收集矩陣每個向量的前兩個元素

[英]Iteratively collect first two elements of each vector of a matrix

我有一個矩陣:

matrix = [['F', 'B', 'F', 'A', 'C', 'F'],
          ['D', 'E', 'B', 'E', 'B', 'E'],
          ['F', 'A', 'D', 'B', 'F', 'B'],
          ['B', 'E', 'F', 'B', 'D', 'D']]

我想刪除並收集每個子列表的前兩個元素,並將它們添加到新列表中。

到目前為止,我已經:

while messagecypher:
    for vector in messagecypher:
        final.extend(vector[:2])

問題是; slice似乎並沒有刪除元素,最后我得到了大量重復字符。 我可以使用.pop(0)兩次,但這不是很干凈。

注意:我刪除元素的原因是因為我需要繼續遍歷每個向量,直到矩陣為空

你可以讓你的slice ,做:

final = []
for i in range(len(matrix)):
    matrix[i], final = matrix[i][:2], final + matrix[i][2:]

請注意,這會同時將切片列表分配回matrix ,並將切片部分添加到final

好吧,您可以使用列表理解來完成任務,但是這可能與直覺相反:

>>> matrix = [['F', 'B', 'F', 'A', 'C', 'F'],
          ['D', 'E', 'B', 'E', 'B', 'E'],
          ['F', 'A', 'D', 'B', 'F', 'B'],
          ['B', 'E', 'F', 'B', 'D', 'D']]
>>> while [] not in matrix: print([i for var in matrix for i in [var.pop(0), var.pop(0)]])
['F', 'B', 'D', 'E', 'F', 'A', 'B', 'E']
['F', 'A', 'B', 'E', 'D', 'B', 'F', 'B']
['C', 'F', 'B', 'E', 'F', 'B', 'D', 'D']

編輯:

使用range使語法看起來更簡潔:

>>> matrix = [['C', 'B', 'B', 'D', 'F', 'B'], ['D', 'B', 'B', 'A', 'B', 'A'], ['B', 'D', 'E', 'F', 'C', 'B'], ['B', 'A', 'C', 'B', 'E', 'F']] 
>>> while [] not in matrix: print([var.pop(0) for var in matrix for i in range(2)])
['C', 'B', 'D', 'B', 'B', 'D', 'B', 'A']
['B', 'D', 'B', 'A', 'E', 'F', 'C', 'B']
['F', 'B', 'B', 'A', 'C', 'B', 'E', 'F']

刪除元素不是執行任務的有效方法。 它要求Python執行大量不必要的工作來轉移內容,以填補已刪除元素留下的漏洞。 取而代之的是,每次在循環中將您的切片每次移動兩個位置:

final = []
for i in xrange(0, len(messagecypher[0]), 2):
    for vector in messagecypher:
        final.extend(vector[i:i+2])

暫無
暫無

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

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