- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个问题。恐怕这对你来说是显而易见的,但目前我不太明白。
我刚刚阅读了切片分配以及空列表的分配如何像删除项目一样工作,例如:
>> L=['a','b','c','d']
>> L[2:3] = []
>> L
['a', 'b', 'd']
但我的问题是 - 更多地期待这个输出不是更合乎逻辑吗?
['a', 'b', [], 'd']
如果我的代码如下所示,我知道上面的输出将为 true:
>> L=['a','b','c','d']
>> L[2:3] = [[]]
>> L
但为什么它是这样构造的,而不是像 f.e.:
>> L=['a','b','c','d']
>> L[2:3] = None
>> L
它对我来说看起来过于复杂,因为我希望当我进行切片分配时,我不希望在这种情况下它会改变我的列表的长度,或者也许我只想删除切片并启动一个空的同时列出。
编辑:我不知道我是否足够清楚 - 我不明白为什么 - 在进行切片分配时 - python 解释器删除列表中的一个项目,而不是将此项目更改为空列表。
最佳答案
我认为造成困惑的原因是您确实在切片而不是索引。观察:
>>> L = ['a','b','c','d']
>>> L[2] = []
>>> L
['a', 'b', [], 'd']
请注意,就 2-3 的范围为 2 而言,L[2:3]
与 L[2]
“相同”(因为切片是不包括)。但是,切片和索引是两种不同的行为,因为切片可以更改列表的长度,而索引只是修改现有元素。
空列表以这种方式工作的原因是切片分配的工作方式。当您分配给切片时,Python 会解压您提供的内容并将其结果存储到索引中。观察:
>>> L = ['a', 'b', 'c', 'd']
>>> L[2:4] = 'e'
>>> L
['a', 'b', 'e']
>>> L = ['a', 'b', 'c', 'd']
>>> L[2:4] = 'efgh'
>>> L
['a', 'b', 'e', 'f', 'g', 'h']
L[2:4] = 'e'
和 L[2:4] = ['e']
在 Python 中的行为是相同的,因为Python 中字符串的行为:它们可以被迭代并因此被解包。
因此,当您输入 L[2:4] = []
时,它将解压 []
的所有元素,并将其内容分配到索引 2 和 3 中。当然,由于没有元素,它会将它们分配给任何内容(注意:与 None
或 ""
不同 - 字面上什么都没有),因此被删除。
关于python - 带有空列表的切片分配 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52452462/
我有一个名为 FeedView 的 View ,由 FeedViewController 处理。 我还有一个名为“NearestStore”的 XIB,它由一个名为“NearestStoreViewC
我有一个警报表,其中 tr 元素是使用 JS 动态添加/删除的。问题是它有一个 border-top 将它与上面的内容分开,当表格为空时我想隐藏这些内容。我试过 :empty 和 display:no
我是一名优秀的程序员,十分优秀!