使用减号返回整个列表的语法是什么?

11 浏览
0 Comments

使用减号返回整个列表的语法是什么?

Python列表具有巧妙的索引/切片功能。以下是几个示例:

x = "123456"
x[:-3]
'123'
x[:-1]
'12345'  # -1切掉最后一个元素
x[:-0]  # -0切掉..全部..这是我想修复的地方
''

我想切掉变量数量的元素d

x[:-d]

但是,如果d为0,我们得到的结果与期望的结果非常不同。一个解决办法是:

d = 0
x[:-d if d else len(x)]
'123456'

这是可能的-但是否有任何[更短]的替代方案?

0
0 Comments

问题的原因是使用负号返回整个列表时的语法错误。具体而言,-0与0是相同的,因此x[0:0]将返回一个空切片。为了解决这个问题,建议使用x[:len(x)-d]来返回整个列表。这种方法不会创建一个新的浅列表。还有一种方法是使用x[:-d] if d else x来避免创建新的列表。

0
0 Comments

当使用减号符号时,如何返回整个列表的语法?

问题的原因:

- 之前没有考虑到创建一个新的浅列表,而是默认创建一个新的列表。

解决方法:

- 可以使用默认值None来实现,x[:-d or None]

其他讨论和发现:

- 实际上,并不会创建一个新的列表,所以这是一个好的解决方法,x[:-d or None] is x的结果为True

- 对于字符串,有一个特殊的情况,不会创建新的字符串,而是重用原来字符串的内存位置。

- 在性能比较中发现,x[:-d] if d else x相对于x[:-d or None]要快大约2.7倍。

- 这可能是因为第一个方法只需要加载d,检查其真值,并加载x,而第二个方法有额外的步骤。

- 在源代码中搜索unicode_result_unchanged可以找到有关此问题的更多信息。

- 在源代码中有一个特殊情况的检查,如果是完整切片,就会返回Unicode字符串。

当使用减号符号时,可以使用x[:-d or None]来返回整个列表,而不会创建新的列表。这是一种简洁而高效的方法。

0