from sys import stderr
from copy import copy
N = 5
L1 = list(range(1,N + 1)) #[1,2,3,4,5]
print("L1 =", L1, file = stderr)
L2 = map(lambda i: i ** 2, L1)
L3 = map(lambda i: i ** 2, L1)
L4 = copy(L2)
L5 = [i ** 2 for i in L1]
L6 = list(map(lambda i: i ** 2, L1))
print("L2 =", list(L2)) #[1,4,9,16,25]
print("L2 =", list(L2)) #[1,4,9,16,25]Je pense ... ?? ??
print("L3 =", list(L3)) #[1,4,9,16,25]
print("L4 =", list(L4)) #[1,4,9,16,25]Je pense ... ?? ??
print("L5 =", list(L5)) #[1,4,9,16,25]
print("L5 =", list(L5)) #[1,4,9,16,25]
print("L6 =", list(L6)) #[1,4,9,16,25]
print("L6 =", list(L6)) #[1,4,9,16,25]
print("L1 =", L1)
L1 = [1, 2, 3, 4, 5]
L2 = [1, 4, 9, 16, 25]
L2 = []
L3 = [1, 4, 9, 16, 25]
L4 = []
L5 = [1, 4, 9, 16, 25]
L5 = [1, 4, 9, 16, 25]
L6 = [1, 4, 9, 16, 25]
L6 = [1, 4, 9, 16, 25]
L1 = [1, 2, 3, 4, 5]
Ce que vous pouvez voir, c'est que l'accès à l'objet créé par ** map n'est valide qu'une seule fois ** (L2
・ L3
). ** De plus, il était inutile de faire une copie superficielle («L4») avec «copy.copy». ** Utilisez la notation d'inclusion de liste ** lors de l'accès plusieurs fois (L5
, mais ** en dehors des crochets **) ou ** instantanément liste ou taple ** ( L6
) Devrait être. ** Lorsque vous devez afficher le contenu d'un objet de carte dans le débogage, vous pouvez être accro à un bogue inexpliqué en raison de ces caractéristiques uniquement lors du débogage. ** **
Comme indiqué dans la section commentaires, ** Si le générateur est inclus entre parenthèses, il sera jetable comme map. ** **
Fondamentalement, vous pouvez éviter des situations comme L2
et L4
en ne faisant un accès qu'une seule fois après la génération (y compris la liste ou en tapant comme L6
).
range
, zip
, etc. généreront des objets similaires, mais ils peuvent également être jetables . </ del>. Soyez prudent lorsque vous accédez plusieurs fois (à partir du commentaire).
Recommended Posts