python - 在 [任何以前的版本] 之前,这在 Python 中是否可行
问题描述
我隐约记得这个东西很久以前就可以工作了有人知道这段代码以前是否真的有效吗?如果自从任何较新的python版本以来,这已被弃用?
代码
# My python version is 3.8
lst = ['a', 'b', 'c', 'd']
lst[0:3] = 100
print(lst)
电流输出
TypeError: can only assign an iterable
预期产出
[100, 'd']
谢谢
解决方案
这在任何版本中都不起作用,因为切片分配需要一个类似序列的对象来分配。
它不起作用的原因是您需要将其转换为单项序列,如下所示:
lst = ['a', 'b', 'c', 'd']
lst[:3] = [100]
print(lst)
或使用元组:
lst = ['a', 'b', 'c', 'd']
lst[:3] = 100,
print(lst)
由于lst[:3]
给出了一个序列对象,你分配给它的对象也需要是一个序列对象。
这在 python 的任何版本中都是不可能的......对于不使用单项序列的索引将是唯一的方法。像这样:
lst = ['a', 'b', 'c', 'd']
lst[3] = 100
print(lst)
但是对于所有 python 版本都需要切片序列。
如python 3的文档中所述,python 2的文档:
如果目标序列允许,切片的长度可能与指定序列的长度不同,因此会改变目标序列的长度。
正如我在Python 1.4的文档中看到的:
如果目标是切片:评估引用中的主要表达式。它应该产生一个可变的序列对象(例如一个列表)。分配的对象应该是相同类型的序列对象。
本文档于 1996 年发布。
所以 25 年来,这是不可能的,python docs 是在 1996 年,但实际上 python 1 是在 1994 年开始的。
所有版本的文档参考都是一样的。
推荐阅读
- matlab - 找到某个值的最后一个索引
- java - Kafka 服务自动关闭
- laravel - Laravel - 如何在嵌套关系中提取对象?
- flutter - ScrollController jumpTo 指定值不起作用 Flutter
- python - 在 Docker 容器中导入 python 文件
- asterisk - 使用 AsterNET.ARI 执行 Asterisk 语音识别应用程序
- laravel - 如何在 virtualmin 上部署 laravel 项目?
- python - 使用startswith检查数据框中的列
- c# - 如何使用 Any(x => DbFunctions.Like()) 优化 LINQ Where 条件
- java - 删除外部调度程序 servlet 并在 spring boot 中使用嵌入的