【问题标题】:String slicing returning unexpected values字符串切片返回意外值
【发布时间】:2020-10-16 21:10:11
【问题描述】:

我希望这是一个简单的问题!我正在尝试反转一个数字,并在“偶数”位置给出数字。当我尝试在一个字符串切片中执行此操作时,我只得到一个数字,即使我期待更多。当我把它分成两片时,我得到了正确的答案,但我不确定为什么。

例如,如果我有数字 512341234,我希望它给我 3131,因为我首先反转字符串 (432143215),然后取偶数位置数字 (4[3]2[1]4[ 3]2[1]5).

下面是我试图用来使其工作的代码,但是将其作为一个切片仅返回单个数字,而将其作为两个切片意味着它返回预期值。这是为什么呢?

num = 512341234
str(num)[1::-2] #returns 1
str(num)[::-1][1::2] #returns 3131

谢谢! 诺亚

【问题讨论】:

  • 第一行说给我第二个元素,然后以 2 的步长向左走。所以 1 是正确的。第二条语句以-1 为步长,然后从第二个值开始给我每个第二个值。拆分第二条语句以查看其工作原理并打印中间结果。
  • 您是否尝试过逐步浏览代码? 但将其作为一个切片仅返回单个数字,而将其作为两个切片意味着它返回预期值。但这不是唯一的区别!

标签: python slice


【解决方案1】:

1::-2 表示从位置 1(第二个字符)开始,一次向后退两个字符。您想从字符串末尾附近的某个地方开始,例如

num = 512341234
str(num)[-1::-2]
'42425'
num = 512341234
str(num)[-2::-2]
'3131'

但您必须根据其中一个字符处于偶数位置(即基于字符串的长度)来选择 -1-2

【讨论】:

  • 我不认为你的最后一句话是正确的。无论字符串的长度如何,str(num)[-2::-2] 都会给出正确的结果
  • @IoaTzimas:问题是“偶数位置”;我认为这可能是从字符串的开头开始计算的。不过,它可能从最低有效数字开始。
  • 我认为这个问题的意思是“反转字符串的偶数位置”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 2015-09-12
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
相关资源
最近更新 更多