Réponses
Trop de publicités?Parce qu'il est plus courant d'appel range(0, 10)
qui renvoie [0,1,2,3,4,5,6,7,8,9]
qui contient 10 éléments qui équivaut len(range(0, 10))
. Rappelez-vous que les programmeurs préfèrent 0 basée sur l'indexation.
Aussi, considérons le code suivant extrait:
for i in range(len(li)):
pass
Pourriez-vous voir que si range()
sont allés jusqu'à exactement len(li)
que ce serait problématique? Le programmeur devra explicitement soustraire 1. Cela suit également la tendance commune de programmeurs préférant for(int i = 0; i < 10; i++)
sur for(int i = 0; i <= 9; i++)
.
Si vous appelez de la gamme avec un début de 1 fréquemment, vous pouvez définir votre propre fonction:
>>> range1 = lambda start, end: range(start, end+1)
>>> range1(1, 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Il fonctionne bien en combinaison avec de base zéro de l'indexation et de l' len()
. Par exemple, si vous avez 10 éléments dans une liste x
, elles sont numérotées de 0 à 9. range(len(x))
vous donne 0-9.
Bien sûr, les gens vont vous dire que c'est plus Pythonic faire for item in x
ou for item, index in enumerate(x)
plutôt que d' for i in range(len(x))
.
Découpage fonctionne de cette façon: foo[1:4]
est articles 1 à 3 de l' foo
(en gardant à l'esprit que le point 1 est en fait le deuxième élément en raison de la non-indexation). Pour des raisons de cohérence, elles doivent fonctionner de la même façon.
Je pense que: "le premier numéro que vous voulez, suivie par le premier numéro que vous ne voulez." Si vous voulez 1-10, le premier numéro que vous ne voulez pas est 11, il est donc range(1, 11)
.
Si elle devient trop lourde pour une application particulière, il est assez facile d'écrire une petite fonction d'assistance qui ajoute 1 à la fin de l'index et des appels range()
.
Il est également utile pour le partage de gammes ; peut être divisé en
et , tandis que la gamme inclusivement, vous écririez soit
ou . Bien que rarement, vous avez besoin de diviser les plages, vous n’ont pas tendance à diviser les listes assez souvent, qui est une des raisons pour trancher une liste
inclut l’élément a-th mais pas le b-th. Puis `` ayant la même propriété rend bien cohérent.