[英]Collect elements from a list of lists based on the first elements of each group
[英]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.