簡體   English   中英

Python展平二維列表的行

[英]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.

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