欢迎回来｡
让我们继续讨论列表｡
到目前为止, 这些方括号, 我们以前见过, 对吧？
我们在处理字符串时看到了它们｡
就像字符串一样, 列表也非常相似, 我们可以使用列表切片｡
如果你还记得字符串切片, 我们有像hello这样的东西, 我们可以把它赋给一个字符串, 比如一个变量字符串, 我们可以先做字符串,
然后切片｡
所以做一些像这样的事情｡
我们有开始, 停止, 然后一步通过｡
所以我们从索引0开始到索引2结束｡
然后一个一个地走｡
所以我们也可以使用列表切片｡
让我们把这张牌放大一点｡
你可以通过这样的格式来让它更干净｡
好吧, 那我们该往购物车里加什么呢？
我们还将添加一些玩具｡
然后你知道吗？
亚马逊现在做杂货｡
所以我们再加点美味的葡萄｡
太棒了｡
现在, 假设我想得到购物车中的每一件商品｡
我们就这么做｡
我们有完整的名单｡
但是让我们使用一些列表切片｡
假设我想从第一个项目抓取到第二个项目｡
如果我单击“运行”｡
我有笔记本和太阳镜｡
也许我想一路走到最后, 但跳过每一秒一个｡
我有笔记本和玩具｡
我们从零开始｡
我们一步一步走向玩具, 我们一步一步走过去, 我们就完成了｡
太棒了｡
这是我们在讨论弦时已经看到的｡
但有趣的是｡
还记得我说过字符串是不可变的吗？
这意味着我们不能改变他们｡
好吧, 我知道了
当我们有一个像Hello这样的字符串的时候, 我们讨论过这个问题｡
我不能把问候语零等同于Z｡
我会在这里得到一个错误｡
我得到字符串对象不支持项分配｡
它是不可改变的｡
但列表的有趣之处在于它们是可变的｡
这样如果我换了我的亚马逊购物车｡
然后说, 你知道吗, 我真的不想要笔记本｡
我要拿第一件东西, 那就是笔记本｡
除了笔记本, 我们还想要什么？
我们会说我们想要一台新的笔记本电脑｡
这是一个很大的升级｡
当我打印这个亚马逊购物车｡
你看那个｡
我可以更改此列表｡
在这个意义上, 它并没有给予我一个错误｡
列表是可变的｡
我们只是简单地把笔记本电脑的内存书架换掉, 我说, 嘿, 把它换成笔记本电脑,
他们就让我们这么做了｡
这太棒了｡
但让我们在这里尝试一些东西｡
如果我在这里创建另一个打印, 在亚马逊购物车中, 我将使用列表切片, 比如说,
我想要从索引1到索引3的项目｡
让我们运行一下, 看看会发生什么｡
猜猜看
这是你所期望的吗？
让我们来看看这个代码｡
当我们到了第十行, 我们抓住亚马逊购物车已经更新了笔记本电脑, 我抓住项目一｡
二三
这就是太阳镜｡
两个玩具｡
所以, 01, 2｡
然后我们在三点停止｡
只是为了让你更容易理解｡
让我们从零开始｡
这样我们就能看到笔记本电脑被换过了｡
然后在第二个, 第11行, 我们打印Amazon购物车｡
但等一下｡
这份名单没有改变｡
这是因为通过列表切片, 我们创建了一个新的列表｡
此列表的新副本｡
我们在这里创建了一个全新的列表, 这样我就可以将它赋值给一个变量, 新购物车是Amazon购物车.
让我们在这里做同样的事情｡
而新卡本身就是一个全新的列表｡
我可以换一辆新车｡
比如说口香糖里的零｡
如果我把这个打印出来｡
你看到了吗？
我有两个新的单独的列表, 但是列表是可变的, 因为我可以随时改变索引中的任何内容｡
每次我们进行列表切片时, 我们都会创建一个新的列表副本｡
但我有个棘手的问题要问你
如果我这么做会发生什么？
如果我运行这个｡
嗯嗯嗯
你看到了吗？
而不是切片我的名单, 我只是说, 新卡将等于亚马逊购物车｡
我把一个新的cart索引0改为等于gum｡
但是现在我的亚马逊购物车也被修改了｡
为什么会这样呢？
这是一个你在面试中可能会遇到的棘手问题｡
原因是, 现在我所做的等于的方式意味着, 嘿, 新购物车将等于亚马逊购物车｡
而亚马逊购物车等于什么？
亚马逊购物车指向我们机器内存中的某个地方, 它说, 嘿, 这就是亚马逊购物车｡
因为这里我们没有复制列表｡
相反, 我们只是说, 嘿, 新卡的价值是亚马逊购物车内存中的任何东西｡
我们现在, 当我们修改新的购物车只是改变亚马逊购物车所有的方式从这里回来｡
所以这是一个重要的概念｡
如果你想, 比如说复制一个列表, 然后你做这样的事情｡
你复制了整个名单｡
这是你在代码库中经常看到的东西｡
但这行是在说, 嘿, 我想创建一个副本｡
使用列表切片来复制这个亚马逊购物车, 它将等于新购物车, 所以现在如果我运行这个｡
您将看到原来的Amazon购物车保持不变, 但新购物车现在有所不同｡
这是一个快速得到你只需要习惯｡
但这是一个重要的概念, 复制和修改列表的概念｡
我们会在接下来的几个视频中深入探讨｡
现在, 休息一下, 我们下一场见｡
再见, 再见, 再见