使用.rsplit()不会产生预期的结果

时间:2014-08-25 22:24:23

标签: python

我想使用.rsplit()操作一个字符串,以便使用逗号分割数据字符串中最后一个逗号之后的任何内容。举个例子:

,000

......应改为:

,0,0,0,

为此,我使用代码:

var = string.rsplit(",",1)[1:]
var = "{}".format(",".join(string(var[0])))

我不是以所需的格式生成数据,而是得到这个:

0,00 

如果最后一个逗号后的所有三位数都为零,则似乎只会发生这种情况。其他似乎运作正常的例子是:

,131 to ,1,3,1,
,311 to ,3,1,1,
,330 to 3,3,0,

任何人都可以解释为什么会这样吗?

由于

2 个答案:

答案 0 :(得分:1)

  

1)方括号中的值有什么作用?

请参阅教程中的Lists以获取完整说明,但简要说明一下:

方括号中的一个简单值是索引。如果您有一个列表a = ['a', 'b', 'c', 'd'],则a[0]'a'a[1]'b',依此类推。

由冒号分隔的一对值是切片:它不是列表中的单个值,而是包含所有值的较小列表。因此,a[1:3]['b', 'c']

您可以不在切片的开头或结尾处,因此a[1:]['b', 'c', 'd']

您可以对索引和切片使用负数,这意味着从结尾开始计算,因此a[-1]'d'a[-2]'c'和{{1} }是a[-3:-1]


所以,当你这样做时:

['b', 'c']

如果你查找str.rsplit,你可以看到line.rsplit(",",1)[1:] 返回一个包含2个字符串的列表 - 最后一个逗号的所有内容,以及最后一个逗号之后的所有内容 - 除非没有逗号,在哪种情况下,它返回1个字符串的列表 - 整个line.rsplit(",", 1)

line表示你想要第二个元素的所有内容。所以,如果有一个逗号,你会得到一个包含1个字符串的列表 - 最后一个逗号之后的所有内容;如果没有逗号,你会得到一个空列表。


让我们逐步完成您编辑过的代码。

[1:]

请注意,其中两个步骤绝对没有任何结果,而其中一个步骤引发异常,我不确定它们的目的是什么。最终结果(删除引发异常的部分)并未证明您声称要尝试修复的内容。所以你的问题完全无法解决。

无论如何,如果您不理解代码如何分解为这些步骤,则不应编写密集代码。把事情写成每行一个简单的表达式,确保你完全理解每个人正在做的事情(例如,通过打印结果,就像我一样),并让所有这些表达工作。在那之后,你可以尝试再次使它更简洁。

答案 1 :(得分:0)

我认为你要做的是这样的事情:

input_string = '237363,237,2376,8273,0932'

last_value_on_the_input_string = input_string.split(',')[-1]

last_value_on_the_input_string_chopped = ','.join(last_value_on_the_input_string)

详细的变量名称应该可以帮助您识别每行上发生的事情,

希望它有所帮助!