Table des matières
回复内容:
Maison développement back-end Tutoriel Python 为什么 Python 里面的 range 不包含上界?

为什么 Python 里面的 range 不包含上界?

Jun 06, 2016 pm 04:22 PM
range start

例如 range(1,5),其实只包含1,2,3,4 即便是range(0,6,2),也不包含6。如果数不在range里那在range里出现这个数字的含义何在? 数组从0开始记数我已经忍了,range不含上界这是一个什么意思?这还让slice等等操作如何被人类理解啊? 另外,左闭右开是哪里来的习惯?有什么渊源? 题主赞同下列答案: “range 的上界参数并非数学意义上的上界,而是计算意义上的跳出循环的条件(当把循环结构作用于这个 range 时,遇到“上界”,就意味着跳出);与 C / C++ 中数组指针为什么被允许指向数组后面的一个元素的原因类似。题主可以查查 Andrew Koenig 在这方面非常细致深入的讨论。” 看见轮子老师的答案我不禁了解了一件事:程序员果然固执。。range 接受的第二个参数又不是数组长度,而是数组的上界。难道你要让我们都认为range(1,6) 中的6是这个数组的长度?1,2,3,4,5 的长度是6?range(5,6) 6 是数组长度? 实际上我赞同range(start,end) 是对应于for(int i=start, i。。不要用C语言来辩解了。我学过C,我知道数组从0开始,但我无法理解range 不含上界。学习下matlab 和Mathematica 以及其他工程软件中看看工程师和科学家怎么想的吧,轮子哥。 另外本题的重点不是数组从0,而是range 的上界。不要抓住dijkstra 这朵奇葩不放谢谢。那个数学家定义的区间是不含右界的请告诉我。我必定谦恭学习

回复内容:

Why are standard iterator ranges [begin, end) instead of [begin, end]? 比较一下下面三种划分实数的方案

[0, 1] (1, 2) [2, 3]…
(0, 1) [1, 2] (2, 3)…
[0, 1) [1, 2) [2, 3)…

显然最后一种方案最美,所有区间包含的元素“一样多”。

当然,这里只是说明半开半闭/半闭半开作划分是最合适的,两者相比之下半闭半开更自然。

天天说什么数学家数学家,题主你个学物理的就不要来指导江山教我们应该怎么设计语言啊。尽管你很固执,我还是想开化开化你。


为什么左闭右开,为什么数组从0开始,这是因为C语言获得一个数组a的元素地址&a[b]就可以直接翻译成&a+b*sizeof(*a),免去了一次减法。这次减法在C语言刚发明的时候可是很重要的哦!然后你有一个长度s,那你遍历数组用的for循环就是for(i=0;i

好了,python又不是C语言,但是(据说)python的第一个实现是C写的哦!几乎所有语言受到C的影响全部都做成这样了。当然有少部分的语言不是,譬如说Visual Basic.NET,譬如说我为我自己的www.gaclib.net 内置脚本引擎做的傻逼小脚本(最后发现swift的关键设计跟我的完全一致,太丢脸了)。这纯粹看语言他爹的喜好。python他爹就不是什么数学家,哈哈哈哈。


不过我们已经互相拉黑了,我也不用看到题主你的评论了,好开心。


Why are standard iterator ranges [begin, end) instead of [begin, end]?


楼下 @shell von 的一个链接,我发现数学家Dijkstra也是这么想的。

关于这个问题,我想应该是这样:

我从c++ 里面迭代器的内容尝试解答一下这个问题,
对于一个容器,我们需要知道它的头尾,最常进行的操作是从begin到end不断+1来循环,此时如何知道循环到达末尾呢,如果end是上界(即包含这一个元素),我们还需对它的下一个元素抛出一个可以判别的信号,那么end的意义就不大了,因此对循环而言,末尾的下一个元素更加重要,可以终止循环。
可以验证这一想法的是,如果采用reversed 迭代器,那么begin指向最后一个元素(包含),而此时的end指向第一个元素的前一个元素,对容器而言,是一个左开右闭的状态,迭代器+1时实际上是向前走。

python中的range不也产生一个list么,遍历总是需要退出的,左闭右开是因为我们总是从list左边开始,遍历到右边结束。

希望有所帮助。 哪个数学家经常用到range
数学家的尊严何在!? 为何楼上都在说数组从0开始这个。我觉得和这个问题毫无关系。

其实程序里使用左闭右开的原因是:

考虑一个区间[l, r], 如果我需要遍历这个区间,需要迭代器支持比较操作。
即:
i = l;
while (i <= r) do {
    process(i);
    i++;
}
Copier après la connexion
大家都喜欢左闭右开区间。 设计者:“爷乐意” 建议你还是用Basic语言好了,数组可以从1开始,for 可以 1 to 2这样写,不过题主好像是个软黑。
——————————————————————————————————————————
python数组

>>> s=[1,2,3,4,5,6]

>>> s

[1, 2, 3, 4, 5, 6]

>>> for i in range(0,6):

... print s[i]



其实来源于

c语言的数组
int arr[6]={0,1,2,3,4,5};//0 to 5...
数组遍历
for(int i=0;iprintf("%d\n",arr[i]);
}
ps:c语言常用i1.i2.极端情况下,如果数组长度为0的话且使用了unsigned int,i——————————————————————————————————————————
再举个例子
2011年到2012年过了多少年,如果算左右界的话:
len(year[2011:2012])=2
这不符合常理

所以左右界中只能算一个
才是
len(year[2011:2012])=1 别犟嘴了,看官方doc不好么?

4.3 The range() Function

说白了,range(a, b)在设计的时候默认a是default as 0的,所以b本来就是当做offset或者说长度存在的一个arg,本来就不是tail index,当你的a不是default的时候,你自然而然以为“应该是一个头一个尾两个index啊?!”,很抱歉,其实不是的。

犟嘴不长学问。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Que dois-je faire si Docker Start ne peut pas démarrer ? Que dois-je faire si Docker Start ne peut pas démarrer ? Oct 21, 2022 pm 03:43 PM

Solution à l'échec du démarrage du docker : 1. Vérifiez l'état d'exécution, puis libérez la mémoire occupée via la commande "echo 3 &gt; /proc/sys/vm/drop_caches" ; 2. Utilisez "$netstat -nltp|grep .. . " pour vérifier si le port a été occupé. S'il s'avère occupé après la mise en ligne, remplacez-le par un port disponible, puis redémarrez.

PHP renvoie toutes les valeurs du tableau pour former un tableau PHP renvoie toutes les valeurs du tableau pour former un tableau Mar 21, 2024 am 09:06 AM

Cet article expliquera en détail comment PHP renvoie toutes les valeurs d'un tableau pour former un tableau. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence. J'espère que vous pourrez gagner quelque chose après avoir lu cet article. . Utilisation de la fonction array_values() La fonction array_values() renvoie un tableau de toutes les valeurs d'un tableau. Il ne conserve pas les clés du tableau d'origine. $array=["foo"=>"bar","baz"=>"qux"];$values=array_values($array);//$values ​​​​sera ["bar","qux"]Utilisation une boucle peut utiliser une boucle pour obtenir manuellement toutes les valeurs du tableau et les ajouter à un nouveau

Que faire si le démarrage du nœud signale une erreur Que faire si le démarrage du nœud signale une erreur Dec 29, 2022 pm 01:55 PM

Solution à l'erreur de démarrage du nœud : 1. Exécutez "node xx.js" directement dans le terminal ; 2. Ajoutez l'élément de démarrage "scripts": {"test": "echo \"Erreur : aucun test spécifié\" && exit 1 » ,"start": "node service.js"}"; 3. Réexécutez "npm start".

Expliquez en termes simples : Comprenez parfaitement le principe de fonctionnement de la gamme de langues Go Expliquez en termes simples : Comprenez parfaitement le principe de fonctionnement de la gamme de langues Go Mar 12, 2024 pm 02:18 PM

Le langage Go est un langage de programmation concis et puissant avec une conception et des fonctionnalités uniques à bien des égards. L'une des fonctionnalités les plus impressionnantes est le mot-clé range, qui est utilisé pour parcourir des structures de données telles que des tableaux, des tranches, des cartes et des canaux. La flexibilité et la commodité de range facilitent la traversée de structures de données complexes, mais de nombreuses personnes ne comprennent pas comment cela fonctionne. Cet article expliquera le fonctionnement de range de manière simple et approfondie, et utilisera des exemples de code spécifiques pour aider les lecteurs à mieux comprendre. Tout d'abord, regardons un exemple simple

Comment utiliser la fonction Range en Java Comment utiliser la fonction Range en Java Apr 19, 2023 pm 11:49 PM

Préface En Java, la méthode Range est disponible dans les classes IntStream et LongStream. Dans la classe IntStream, il est utile de renvoyer la valeur séquentielle de IntStream dans la portée du paramètre de fonction. Dans la méthode, startInclusive(inclusive) et endExclusive(exclusive) sont les deux paramètres utilisés avec la taille du pas d'incrément, comme mentionné précédemment, la valeur de début sera incluse et la valeur de fin sera exclue. Dans le cas de LongStream, la seule différence est l'ajout de la valeur LongStream. Syntaxe de plage Voyons la syntaxe de la méthode range en Java. Plage IntStream

L'énorme Cadillac Escalade IQ offre 460 milles d'autonomie à un prix allant jusqu'à 170 000 $ L'énorme Cadillac Escalade IQ offre 460 milles d'autonomie à un prix allant jusqu'à 170 000 $ Sep 30, 2024 am 06:15 AM

La version électrique de GM du légendaire Escalade vient de sortir son configurateur, et le prix varie de 130 000 $ à environ 170 000 $ après incitations. C'est plus que presque tout autre véhicule électrique, camionnette ou SUV de luxe, y compris le C de Tesla.

Comment utiliser la méthode start et la méthode run dans le thread Java Comment utiliser la méthode start et la méthode run dans le thread Java Apr 20, 2023 am 08:58 AM

Méthode start et méthode run La méthode $start()$ est utilisée pour démarrer un thread À ce moment, le thread est dans l'état prêt (exécutable) et n'est pas en cours d'exécution. Une fois la tranche de temps $cpu$ obtenue, le $. La méthode run()$ commence à être exécutée. L'appel direct de la méthode $run()$ appelle uniquement une méthode dans une classe, qui est essentiellement exécutée dans le thread actuel. Par conséquent, cela ne peut être réalisé qu'en utilisant la méthode $start()$ pour appeler $run()$. Méthode véritable multithread. Exemple de code@Slf4j(topic="c.Test4")publicclassTest4{publicstaticvoidmain(Strin

Comment utiliser la fonction range de Python Comment utiliser la fonction range de Python May 16, 2023 pm 08:26 PM

1. Qu'est-ce que la fonction range() ? La fonction range() est la fonction intégrée de Python. Elle renvoie une série d'entiers ajoutés consécutivement et peut générer un objet liste. La plupart d'entre eux apparaissent souvent dans les boucles for et peuvent être utilisés comme index dans les boucles for. Pratique des petites questions : for..range Exercice 1 : Utilisez la boucle for et range pour trouver tous les nombres pairs entre 0 et 100 et ajoutez-les à une liste. list1=[]foriinrange(0,100,2):list1.append(i)print(list1)2 : utilisez la boucle for et la plage pour trouver les nombres compris entre 0 et 50 qui peuvent être divisés par 3 et ajoutez-les à une liste. liste2

See all articles