首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么XPath中的索引从1开始而不是0?

这是因为XPath的设计者选择了从1开始的索引,而不是从0开始。这个决策是基于以下几个原因:

  1. 人类的阅读习惯:在文本和其他数据结构中,行号和列号通常从1开始计数,这样与人类的阅读习惯相符。
  2. 方便表达:在XPath中,使用从1开始的索引可以更简洁地表达节点的位置。例如,/bookstore/book[1]表示选择第一个book元素,而不是/bookstore/book[0]
  3. 与其他语言和工具的兼容性:许多编程语言和工具使用从1开始的索引,例如Excel和SQL。将XPath的索引与这些工具保持一致,有助于提高可读性和易用性。
  4. 避免混淆:在某些编程语言中,数组的索引是从0开始的,而在其他编程语言中是从1开始的。为了避免混淆,XPath选择了从1开始的索引。

总之,XPath的设计者选择了从1开始的索引,以便与人类的阅读习惯、其他编程语言和工具保持一致,并提高可读性和易用性。虽然这个决策可能对初学者来说有些不直观,但在实际使用中,人们很快就会适应这种索引方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么数组下标 0 开始?而不是 1

很多小伙伴初学编程时候都被元素下标折磨过,为什么很多编程语言要把 0 作为第一个下标索引,而不是直观 1 呢?...,那是否有理由选择其中一种而不是另一种?...1 和 2 不等式区别就在于: 1 不等式左边(下界)等于序列最小值,不等式右边(上界)大于序列最大值 2 不等式左边(下界)小于序列最小值,不等式右边(上界)等于序列最大值 对于第...2 个不等式来说,下界小于序列最小值,这会出现一个问题,比如我们连续序列是 [0,1,2,3,4] 那么按照第 2 个不等式写法,不等式左边就是 -1,-1 是非自然数,而我们需要表示连续序列是自然数序列...遵循不等式 1 规则: 当从下标 1 开始时,下标范围 1 ≤ i < N+1 当从下标 0 开始时,下标范围 0 ≤ i < N 哪个更优雅?

83430

数组下标为什么0开始,而不是1

例如:二叉树,堆,图,等,是非线性表,是因为,在非线性表,数据之间并不是简单前后关系。 数组是如何随机访问数组元素? 数组是如何实现根据下标随机访问数组元素吗?...2,根据下标随机访问时间复杂度是O(1)。 低效“插入”和“删除” 插入 插入:最好O(1) 最坏O(n) 平均O(n) 什么时候会是O(1)?...最后,数组元素如下: A,C,X,D,E,C。 什么时候会是最坏O(n)? 数组开头插入数据,所有的数据往后移一位,情况最差,时间复杂度为O(n) 。...为什么数组要从 0 开始编号,而不是1偏移角度理解a[0] 0为偏移量,如果1计数,会多出K-1。增加cpu负担。...为什么循环要写成 for(inti=0;i<3;i++)而不是 for(inti=0;i<=2;i++)。

6.2K10

为什么不是0,1,2,3,4?setTimeout奇怪问题

网上看到这样一个题目: for(let i=0;i<5;i++){ setTimeout(function(){alert(i)},0) } 它输出顺序并不是01,2,3,4,也不是固定某一个顺序数字...为什么是这样呢?...其实这里有三个关键点, 1、let,它声明了一个块级作用域; 2、alert,它引起了js阻塞; 3、setTimeout添加到js队列; 简单讲, 1、js没有任何可以立即执行代码,它们都是需要被添加到队列...2、setTimeout并不是指定了间隔时间就一定会按指定时间执行。它只是说“在指定时间之后,加入队列,等待执行”。至于什么时候执行,要看进程队列空闲程度。...这个题目很简单,但包含了几个关键知识点,我把这个题目添加到了先行者旗下js问答小组之中, 在我收到回复邮件,这个同学回答很靠谱, ?

65090

漫话:如何给女朋友解释为什么计算机0开始计数,而不是1开始?

0开始更优雅 在《为什么程序员喜欢使用0 ≤ i < 10这种左闭右形式写for循环?》一文我们分析过,Dijkstra通过分析,得出在进行范围表达时候,使用左闭右方式更加合理。...他认为,使用左闭右表达方式,当下标 1 开始时,下标范围为 1 <= i < N+1;当下标 0 开始时则是 0 <= i < N; 而显然后面这种表达式更加漂亮、优雅一些。...因为指针*(p+0)这种表达形式0表示是偏移量,所以,无论数组下标几开始,*(p+0)都是用于存取内存p+0位址值,也就是0X0000001这块内存单元值。...;Python祖先之一ABC语言,使用索引1开始1-based indexing),而对Python语言有巨大影响另一门语言,C语言索引则是0开始。...我最早学习几种编程语言(Algol, Fortran, Pascal)索引方式,有的是1-based,有的是定义某个变量开始(variable-based indexing)。

1K40

TS 01 - TypeScript 各种符号

非空断言操作符会编译生成 JavaScript 代码移除,所以在实际使用过程,需要注意。 # 确定赋值断言 允许在实例属性或变量声明后面放置一个 !...对于 0 和 空字符串,并不会出现短路。 # 可选元素访问 可选元素访问允许访问非标识符属性,如任意字符串、数字索引或 Symbol。...void 0 : arr[index]; // } # 可选链与函数调用 函数调用时,如果被调用方法不存在,使用可选链可以使表达式自动返回 undefined 而不是抛出一个异常。...void 0 : _a.call(obj); 如果存在一个属性名且该属性名对应不是函数类型,使用 ?. 仍然会产生一个 TypeError 异常。...移除了可选属性 ?,使得属性可选变为必选。 # & 合并 在 TypeScript 交叉类型是将多个类型合并为一个类型。

1.5K10

为什么网站会索引消失?

201904111554992695401473.png 那么,网站索引擎消失原因有哪些呢?  ...1、批量投放新闻外链   短时间内在互联网平台上投入大量新闻链接,链接到网站首页,并且新闻链接大部分来自站群低质量网站,这导致成百上千链接,都是同一个网址,很容易被认定是操控外链,被搜索引擎惩罚。...2、付费购买链接   操控外链最简单办法就是购买链接,但微妙购买链接,很难被识别,比如:双方站点相关性比较高,并且双方导出链接几乎不是很多,这让搜索引擎很难判定,但如果你选择购买链接,导出链接极高...3、频繁修改网页标题   有的站长喜欢频繁更改网页标题,如果你每一篇文章都是经常修改标题的话,搜索引擎会认定为你是一个极其不稳定站点,逐渐会降低排名,时间久了,可能会索引库删除你网址。  ...4、单一锚文本   很多站长为了提高关键词排名,经常是利用大量内部锚文本指向关键词,但他忽略了一个问题,就是锚文本过于单一,而不是多元化利用相近关键词替代,这也是一个非常不友好行为。

1.3K40

01,了解NLP文本相似度

二维公式: p = sqrt( (x1-y1)^2+(x2-y2)^2 ) 三维公式: p = sqrt( (x1-y1)^2+(x2-y2)^2+(x3-y3)^2 ) 当然,毕竟不是存活于刘慈溪三体世界之下...前几年曾经有过一个地方高考题出过余弦定理证明,当时也有人通过向量方法来证明,两行就得出了答案(其实这儿有点疑问,因为课本对向量内积是通过余弦定理来证明,所以个人来看通过向量内积来证明余弦定理是有些逻辑问题...,跟各个点所在位置坐标是直接相关;而余弦距离衡量是空间向量夹角,更加体现在方向上差异,而不是位置。...S1: "为什么眼里常含泪水,因为我对这片土地爱得深沉" S2: "我深沉爱着这片土地,所以我眼里常含泪水" 第一步,分词: 我们对上述两段话分词分词并得到下面的词向量: S1: [为什么 我...,现在我们可以想象在空间中存在着两条线段:SA和SB,二者均原点([0, 0, ...])出发,指向不同方向,并分别终结于点A [1 1 1 2 1 1 1 1 0 1 1 0 0 1 1 1]和点

6.2K212

如何在Python01构建自己神经网络

输入数据微调权重和偏差过程称为训练神经网络。 训练过程每一次迭代由以下步骤组成: · 计算预测输出ŷ,被称为前馈 · 更新权重和偏差,称为反向传播 下面的顺序图说明了这个过程。...注意,为了简单起见,我们假设偏差为0。 然而,我们仍然需要一种方法来评估我们预测准确度。 损失函数 有许多可用损失函数,问题性质决定了对损失函数选择。...请注意,为了简单起见,我们只显示了假设为1层神经网络偏导数。 让我们将反向传播函数添加到python代码。...为了更深入地理解微积分和链规则在反向传播应用,我强烈推荐3Blue1Brown编写本教程。...image.png 让我们看一下神经网络经过1500次迭代最后预测(输出)。 image.png 我们做到了!我们前馈和反向传播算法成功地训练了神经网络,预测结果收敛于真值。

1.8K00

01,QAPM在私有化实践过程质量保障

前言 QAPM(移动监控)在TMF交付已经走过两个年头,两年时间,我们也在不断成长。...截止到2020年12月,QAPM私有化工单数量收敛,安灯工单数48单下降到8单,同时,公有云工单也同步下降,122单下降到42单,产品包含有前端、后台、SDK,还包括大数据,在公有云中涉及组件就超过...那么,01,QAPM在私有化实践过程质量保障是如何建设呢?本篇文章,将为你揭开这个神秘面纱。...效能提升 大幅降低回归web测试成本,提升测试效率,测试周期1天+缩短至10+min;部署codedog专机,并发扫描任务, 扫描时长由40min+缩短到20min;MR流水线实现自动化编包、部署、测试...,发布周期3周缩短到30min;私有云部署由2个腾讯工程师出差7天缩短到完全交付给1个区技部署1天。

1.9K40

框架篇-Vue面试题1-为什么 vue 组件 data 是函数而不是对象

在vue组件data属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}简写 return...// data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象函数,因为组件可能被用来创建多个实例 也就是说,在很多页面...,定义组件可以复用在多个页面 如果data是一个纯碎对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例修改data,都会影响到所有的组件实例 如果data是函数,每次创建一个新实例后...(p1.data.name); // 川川 挂载在原型下属性如果是一个对象,实例化出来对象(p1,p2)都指向是同一份实体 原型下属性相当于是公有的 修改一个实例对象下属性,也会造成另一个实例属性跟着改变...(); p1.data.name = '随笔川迹'; // 如果是函数形式去定义属性,它是有自定作用域,在修改时候不会影响到别人 console.log(p1.data.name); // 随笔川迹

1.9K20

《手把手教你》系列技巧篇(十四)-java+ selenium自动化测试-元素定位大法之By xpath上卷(详细教程)

XPath 是XML 和Path缩写,主要用于xml文档中选择文档节点。基于XML树状文档结构,XPath语言可以用在整棵树寻找指定节点。XPath 定位和CSS定位相比有更大灵活性。...XPath 在文档树某个节点既可以向前搜索,也可以向后搜索,CSS定位只能在文档树向前搜索,但XPath定位速度比CSS 慢一些。...("/html/body/div[x]/form/input") x 代表第x个 div标签,注意,索引1始而不是0 具体步骤: 在被测试百度网页, (1)打开Chrome浏览器,输入百度网址访问百度首页...[x]"), [x]依然是可以省略 具体步骤: 在被测试百度网页,按照宏哥在5.2方法 (1)查找输入框并输入“北京宏哥”,(2)查找“百度一下”按钮,(3)点击“百度一下”按钮。...xpath 文档任何元素节点开始解析 7.拓展 7.1使用浏览器调试工具,可以直接获取xpath语句 这个主要是针对不会或者不熟悉xpath语法小伙伴或者童鞋们宏哥提供一种方法,其实xpath

1.2K30

01详解推荐系统嵌入方法,原理、算法到应用都讲明白了

通过嵌入,我们可以在更低维度解决问题,人类大脑是比较善于处理低维(三维以下)问题,对高维问题更难理解,所以嵌入方法也是一类方便我们理解和认知方法。 为什么嵌入方法有效呢?...参考文献12提出了一个CoFactor模型,将矩阵分解和Word2Vec(参考文献27证明Word2Vec嵌入等价于一类PMI矩阵分解,本文作者也是采用PMI分解思路,而不是直接用Word2Vec...因此,为了平衡商品之间冷热情况,最终Zipfian分布来抽取负样本。具体采样方式如下: 先将所有样本按照访问量降序排列按照[0,D)来索引,我们可以用如下公式来近似Zipfian分布 ?...(1) 用户行为构建item有向图 用户在淘宝上访问行为是有时间顺序,是一个行为序列,一般协同过滤只考虑了用户访问商品是否在同一个行为序列,而忽略了访问序关系,而序关系可能反应了用户兴趣特征...来近似item嵌入。当然不是跟item ID关联所有ID都有嵌入,我们只需要选择有嵌入ID代入上式即可。通过模型线上验证,这种方式得到嵌入效果还是很不错,可以很好地解决商品冷启动问题。

1.7K00

【Python基础】列表与访问列表

列表是由一系列按照特定顺序排列元素组成。所以它可以包含字母、数字,也可以把任何东西加入列表,通常用[]来表示列表,并用逗号来分割其中元素。...,只需要将该元素位置或索引告诉Python即可,比如说我们取自行车列表,第一个自行车: bicycles=['trek','cannondale','redline','specialized']...print(bicycles[0]) 输出结果 trek 索引0始而不是1开始 在Python,第一个列表元素索引0不是1,在大多数编程语言中都是如此。...第二个列表元素索引1,根据这种计数方式,访问列表任何元素,将其位置减1,作为索引即可。...根据上述原则,我们取一下列表第二和第四自行车: bicycles=['trek','cannondale','redline','specialized'] print(bicycles[1])

1.5K10

原来她才是维密大秀“一姐”

秀/闭秀/佩戴Fantasy Bra模特一定都是维密天使吗? 中国模特们在维密大秀是否也有了一席之地? 维密选人是不是越来越“花心”了? 话不多说,我们直接进入正题吧!...网页秀和闭秀按照时间顺序被记录在了一起,原始数据表格index为奇数行是秀模特,偶数行为闭秀模特,大秀时间1995年到2017年(其中2004年没有走秀,而是以巡回展出形式呈现)。...创建新列open,若该模特在该年走秀担任秀,则open取值为1,否则为0: #编写for循环,查找历年走秀记录每一个(模特,年份)组合是否出现在秀记录 for i inrange (0,777...至此,我们得到了下一步数据可视化需要两个表格: 1.历年走秀记录(每一行是每年参与走秀一位模特,记录模特在当年大秀是否秀/闭秀/佩戴fb) 2.全部模特列表(每一行是一位模特,记录该模特国籍...1995年到2018年一共24个set model_list_by_year = list(range(0,24)) for i inrange(0,24): model_list_by_year

55630

2022春节贺岁档电影分,水门桥不理想,四海崩了!用Python一探究竟

尽管受到疫情影响,部分地区被迫关闭了电影院,但从大年初一国影史第二单日总票房数据来看,2022 年春节期间大家观影热情还是十分高涨。...目前,几部真人电影豆瓣已经分了。...本文我们用 Python 爬取这几部豆瓣电影评论,爬取具体分析过程这里就不说了,不了解可以参考一下:豆瓣影评爬取参考,主要实现代码如下: def spider(): url = 'https...=headers) # 状态码 200 表是成功 print('第', i, '页', '状态码:',data.status_code) # 暂停 0-1...output_name="comment.png") Image(filename="comment.png") 首先我们来看《四海》,《四海》口碑为什么没有纵横四海

20620

破解验证码

今天用网站是古诗文网,它界面是这样: 思路就是:爬取网页,获取图片,将图片加载到本地,然后再用第三方识别出来,马上干。...可以看到图片在一个class=‘mainreg2’div标签下面的三个div标签第三个,可以这样定位://div[@class='mainreg2'][3]/img/@src(注意不是[4]啊!!...早上好,继续研究,现在奇怪就是div[@class='mainreg2']标签应该在div标签第四个,但是索引却是3。...然后我尝试打印了第一条索引结果 re = tree.xpath("//div[@class='mainreg2'][1]") 出来结果居然有两个 [, ] 那就说明索引1div[@class='mainreg2']标签有两个,我猜测应该是因为他们不是同一级 第一个1是他层级里第一个

1.4K30

MySQL列属性之自增长

歌曲为:《路》-藤竹京 自增长 自增长:当对应字段不给值(NULL)或者给默认值时,该字段会自动被系统触发,系统会当前字段已有的最大值再进行+1操作,得到一个新在不同字段。...新增自增长 任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值)。 自增长字段必须是数字(整型) 一张表最多只能有一个自增长,和主键一起搭配。...如上图运行结果可知: .自增长起始为1,且每次加1。 2.自增长如果对应字段输入了值,那么自增长失效,但是下一次还是能够正确自增长,即值加1。...底层原理来讲:为啥自增长是1始而不是0呢?以及为什么每次都是自增1呢? To:所有系统表现(如字符集,校对集)都是由系统内部变量进行控制。...可以修改变量实现不同效果:修改是针对整个数据修改,而不是单张表(修改是会话级) 语句形式:set auto_increment_increment=5; — 一次修改5 删除自增长 自增长是字段一个属性

4.6K20

保姆级教学,手把手教你用Python爬虫(附详细源码)

我们再来看下爬虫应该遵循规则:robots协议是一种存放于网站根目录下ASCII编码文本文件,它通常告诉网络搜索引漫游器(又称网络蜘蛛),此网站哪些内容是不应被搜索引漫游器获取,哪些是可以被漫游器获取...网站长这样: [ffbd37d0430d4a888e7ee0d0fb244f0a~tplv-k3u1fbpfcp-zoom-1.image] 所需字段已用红框标记,数据量粗略看了下,1751页共5万多条记录...而python只要运行几分钟就能把所有数据保存到你excel里,是不是很舒服?...~tplv-k3u1fbpfcp-zoom-1.image] 而我们需要提取数据,就潜藏在这网页源代码,我们要用lxml库etree方法解析下网页。...[90704d7842ae4c0abf15f4806cc91950~tplv-k3u1fbpfcp-zoom-1.image] 所有tr都提取下来了,接下来就得依次tr里面提取具体字段了。

1.1K21

爬虫入门到放弃06:爬虫如何玩转基金

,如下图: 主题分类 「确定爬取内容」点击主题下主题索引 白酒 进入白酒列表。...点击招商证白酒,进入详情页面。 根据自己需求,页面上内容确定要爬取字段。这里要爬取字段除了图中红框部分,还有基金名称、基金编码、所属主题字段。...刚接触爬虫可能还在疑问为什么,开发过爬虫已经开始抢答了: 嗯,什么是动态加载? 这里我就用我自己理解说一下。...「js将数据渲染到网页过程方式就是动态加载」。那么,数据哪来? 你输入url请求网站时,其实js定义方法也偷偷地帮你发起了请求。...: worth = 0 scope = html.xpath('//div[@class="infoOfFund"]/table/tr[1]/td[2]/text()')[0].

54210
领券