[英]Python flatten rows of 2D list
目前正在開發一個需要展平二維列表的列、行和對角線的程序。 我編寫了以下代碼來展平列和對角線,但無法展平行。 我不確定我執行不正確。
cols = []
rows = []
max_col = len(grid[0])
max_row = len(grid)
for y in range(max_row):
rows.append(grid[y][x])
for x in range(max_col):
cols.append(grid[y][x])
print(cols)
print(rows)
firstDiagonal = [grid[i][i] for i in range(len(grid))]
secondDiagonal = [grid[i][len(grid)-1-i] for i in range(len(grid))]
輸出類似於: ['G', 'A', 'O', 'C', 'T']['T', 'E', 'B', 'R', 'S'] 行輸出應該不再模仿列輸出。 ['A','S','T','R','V','Y','V','B','B','G']
要沿相反的維度展平,您需要交換循環的方向。 如果你通過做展平列
cols = []
for y in range(max_row):
for x in range(max_col):
cols.append(grid[y][x])
然后你做
rows = []
for x in range(max_col):
for y in range(max_row):
rows.append(grid[y][x])
您可以使用extend
方法大大簡化cols
的計算,因為內部循環遍歷整個行:
cols = []
for y in range(max_row):
cols.extend(grid[y])
或者更好:
cols = []
for row in grid:
cols.extend(row)
這樣的簡化不適用於rows
,但您可以使用zip
使用 transpose 習慣用法:
rows = []
for col in zip(*grid):
rows.extend(col)
最后,可以使用以下任何嵌套推導將每個表達式寫成單行:
cols = [grid[y][x] for y in range(max_row) for x in range(max_col)]
cols = [item for row in grid for item in row]
rows = [grid[y][x] for x in range(max_col) for y in range(max_row)]
rows = [item for col in zip(*grid) for item in col]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.