Modification d'une valeur de liste à l'aide d'une liste de compréhension en python

voix
1

J'ai une liste imbriquée composée de « x et » de, avec les limites représentées par. « - ». S'il y a un « x », je dois changer. » dans le carré de 3x3 le « x » à un caractère tel que « | ».

J'ai le code de travail, mais je me demande si et comment je pouvais utiliser la compréhension de la liste sur ce problème au lieu? Je ne sais pas comment ou si je peux remplacer une valeur dans ma liste imbriquée en utilisant la compréhension de la liste. Je ne que lorsque vous utilisez la compréhension de la liste comme

myList = [expression, for clause, condition] 

le code ajoute l'expression à maListe comme il parcourt la boucle et vérifie l'état.

Compte tenu de ce que ma liste d'origine:

myList = [
         ['-','-','-','-','-','-','-'],
         ['-','x','.','.','-','-','-'],
         ['-','.','.','.','-','-','-'],
         ['-','.','x','.','-','-','-'],
         ['-','.','.','.','.','.','-'],
         ['-','-','-','-','-','-','-']
         ]

Je dois le changer pour cela (en supposant que la ligne initiale et de la colonne sont 3 et 2:

myList = [
         ['-','-','-','-','-','-','-'],
         ['-','x','.','.','-','-','-'],
         ['-','|','|','|','-','-','-'],
         ['-','|','x','|','-','-','-'],
         ['-','|','|','|','.','.','-'],
         ['-','-','-','-','-','-','-']
         ]

Ma fonction prend une liste imbriquée et les valeurs de rangée et de colonne de la « x » en tant que paramètres d'entrée. Voici ce que j'ai et cela fonctionne:

for row in [y-1, y, y+1]:
    for column in [x-1, x, x+1]:
        if nestedList[row][column] == '.':
            nestedList[row][column] = character
Créé 20/10/2018 à 03:27
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Probablement pas la meilleure idée, mais voici la réponse:

x = 2
y = 3
[['|' if x-1 <= i <= x+1 and y-1 <= j <= y+1 and (myList[j][i] == '.') else myList[j][i] for i in range(len(myList[y]))] for j in range(len(myList))]

Notez que cela génère une nouvelle liste, car la compréhension de la liste ne fonctionne pas avec les affectations. Ici s'élargi pour plus de clarté:

[['|' if x-1 <= i <= x+1 and y-1 <= j <= y+1\
  and (myList[j][i] == '.') else myList[j][i]\
  for i in range(len(myList[y]))] for j in range(len(myList))]
Créé 20/10/2018 à 03:37
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more