/ / Que fait le [:] dans cette ligne? table [i] = table [i - pièce] [:] [dupliquer] - python, programmation dynamique

Que fait le [:] dans cette ligne? table [i] = table [i - pièce] [:] [dupliquer] - python, programmation dynamique

C’est une solution de programmation dynamique pour le problème de changement minimum en python à partir de Bryce Boe. Je ne comprends pas ce qui se passe dans le bloc elif en général. Plus précisément, que fait le [:] dans cette ligne

table[i] = table[i - coin][:]

Cela pourrait-il être écrit avec un dictionnaire au lieu de la liste de mémorisation de table?

def solve_coin_change(coins, value):
"""A dynamic solution to the coin change problem"""

table = [None for x in range(value + 1)]
table[0] = []
for i in range(1, value + 1):
for coin in coins:
if coin > i:
continue
elif not table[i] or len(table[i - coin]) + 1 < len(table[i]):
if table[i - coin] != None:
table[i] = table[i - coin][:]
table[i].append(coin)

if table[-1] != None:
print("%d coins: %s" % (len(table[-1]), table[-1]))
else:
print("No solution possible")

coins = [1, 2, 4]
value = 11

solve_coin_change(coins, value)

Réponses:

3 pour la réponse № 1

Cette ligne est une copie de la liste table[i - coin], pas un alias. Il utilise slice notation.

table[i] = table[i - coin][:]

Chaque élément est copié au lieu d’attribuer une nouvelle étiquette à table[i - coin]faire table[i] un objet indépendant; i / e si vous pouvez modifier soit table[i - coin], ou table[i] indépendamment de l'autre.


2 pour la réponse № 2

C'est la notation de découpage en liste. Dans ce cas, il est utilisé pour créer une copie du tableau [i-coin] au lieu d'utiliser une référence.