Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

I want to manipulate a string using .rsplit() so that anything after the last comma in a string of data is split using commas. As an example:

,000

...should be changed to:

,0,0,0,

In order to this I am using the code:

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

Rather than producing data in the desired format, I am instead getting this:

0,00 

This only seems to be happening if all three digits after the last comma are zeros. Other examples that seem to have worked ok are:

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

Can anyone explain why this is?

Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
160 views
Welcome To Ask or Share your Answers For Others

1 Answer

1) What do the values in the square brackets do?

See Lists in the tutorial for a full explanation, but briefly:

A simple value in the square brackets is an index. If you have a list a = ['a', 'b', 'c', 'd'], then a[0] is 'a', a[1] is 'b', and so on.

A pair of values separated by a colon is a slice: it gives you not a single value from the list, but a smaller list consisting of all of the values. So, a[1:3] is ['b', 'c'].

You can leave off the start or end of a slice, so a[1:] is ['b', 'c', 'd'].

You can use negative numbers for both indices and slices, meaning to count from the end, so a[-1] is 'd', a[-2] is 'c' and a[-3:-1] is ['b', 'c'].


So, when you do this:

line.rsplit(",",1)[1:]

If you look up str.rsplit, you can see that line.rsplit(",", 1) returns a list of 2 strings—everything up to the last comma, and everything after the last comma—unless there were no commas, in which case it returns a list of 1 string—the whole of line.

The [1:] means that you want everything from the second element on. So, if there was a comma, you get a list of 1 string—everything after the last comma; if there was no comma, you get an empty list.


Let's step through your edited code piece by piece.

>>> s = ',000'
>>> split_s = s.rsplit(",", 1)
>>> split_s
['000']
>>> var = split_s[1:]
>>> var
['000']
>>> var0 = var[0]
>>> var0
'000'
>>> svar0 = string(var0)
TypeError: 'str' object is not callable
>>> # ignore that part, I guess?
>>> joined = ",".join(var0)
'0,0,0'
>>> var = "{}".format(joined)
>>> var
'0,0,0'

Notice that two of these steps do absolutely nothing, while one of them raises an exception, and I'm not sure what they were intended to do. And the final result (removing the part that raises an exception) doesn't demonstrate what you claimed you were trying to fix. So your question is completely unanswerable.

At any rate, if you don't understand how your code breaks down into these steps, you shouldn't be writing dense code. Write things as exactly one simple expression per line, make sure you understand exactly what each one is doing (e.g., by printing out the results, as I did), and get all of them working. After that, you can try to make it more concise again.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...