簡體   English   中英

如何簡化此列表?

[英]How can I simplify this list?

列表切片從來都不是我在Python中最強的方面,我有點茫然。

for x in range(1, width-1):
  for y in range(1, height-1):
    temp, walls = [], 0
    temp = [[ grid[x-1][y-1], grid[x][y-1], grid[x+1][y-1] ],
            [ grid[x-1][y], '@', grid[x+1][y] ],
            [ grid[x-1][y+1], grid[x][y+1], grid[x+1][y+1] ]]
for l in temp: walls += l.count('#')

這是我的細胞自動機地圖生成代碼的一部分,用於簡單的roguelike。 漫長的丑陋聲明可以通過某種方式簡化。 我認為temp = [ grid[x-1::3][y-1], grid[x-1::3][y], grid[x-1::3][y+1] ]工作,但索引超出范圍錯誤。

如果我理解正確,我想你想要:

temp = [l[y-1:y+2] for l in grid[x-1:x+2]] # extract local data
temp[1][1] = "@" # replace centre
walls = sum(l.count("#") for l in temp) # count walls

您嘗試使用的切片:

l[n::3]

將采取從索引每第三項nl到端部; range ,slice的參數為[start:stop:step]

暫無
暫無

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

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