如何用逗号分隔的字符串替换空字符串?

时间:2010-04-09 11:29:07

标签: python string

“8,5,1,4,7 ,,,, 7,1,9,3,6 ,,, 8,6,3,9,2,5,4 ,,,,, 3,2 ,,, 7,4,1,1,4,6,9,...,5 ,,,, 5 ,,, 1,,6,3 ,,, 6,5 ,,,, 7, 4,,1,7,6 ,,,, 8日,5 ,,, 7,1,,3,9,“

我正在进行编程挑战,我需要将此序列解析为我的数独脚本。 需要将上述序列放入8,5,0,1,4,7,0,0,0,7,0,1,9,3,6,0,0,8 ........ 。 我尝试了但是没有成功,感谢帮助,谢谢。

6 个答案:

答案 0 :(得分:11)

您可以使用

[(int(x) if x else 0) for x in data.split(',')]

data.split(',')将字符串拆分为一个列表。它分裂为逗号字符:

['8', '5', '', '1', '4', '7', '', '', '', ...]

表达式

(int(x) if x else 0)
如果int(x)为True,则

返回x,如果x为False,则返回0。请注意,空字符串为False。

答案 1 :(得分:5)

Python中通常不需要正则表达式。给定字符串s,请尝试:

','.join(x or '0' for x in s.split(','))

我假设你想用0填充空白。如果你想要一个整数列表而不是一个字符串,试试这个:

[(x and int(x)) or 0 for x in s.split(',')]

答案 2 :(得分:4)

s = "8,5,,1,4,7,,,,7,,1,9,3,6,,,8,6,3,9,,2,5,4,,,,,3,2,,,7,4,1,1,,4,,6,9,,5,,,,5,,,1,,6,3,,,6,5,,,,7,4,,1,7,6,,,,8,,5,,,7,1,,3,9,"
s = re.sub('((?<=,)|^)(?=,|$)', '0', s)
print s

打印:

8,5,0,1,4,7,0,0,0,7,0,1,9,3,6,0,0,8,6,3,9,0,2,5,4,0,0,0,0,3,2,0,0,7,4,1,1,0,4,0,6,9,0,5,0,0,0,5,0,0,1,0,6,3,0,0,6,5,0,0,0,7,4,0,1,7,6,0,0,0,8,0,5,0,0,7,1,0,3,9,0

答案 3 :(得分:0)

>>> s="8,5,,1,4,7,,,,7,,1,9,3,6,,,8,6,3,9,,2,5,4,,,,,3,2,,,7,4,1,1,,4,,6,9,,5,,,,5,,,1,,6,3,,,6,5,,,,7,4,,1,7,6,,,,8,,5,,,7,1,,3,9,"
>>> s=s.split(",")
>>> for n,i in enumerate(s):
...     if i=="" : s[n]=0
...
>>> s
['8', '5', 0, '1', '4', '7', 0, 0, 0, '7', 0, '1', '9', '3', '6', 0, 0, '8', '6', '3', '9', 0, '2', '5', '4', 0, 0, 0, 0, '3', '2', 0, 0, '7', '4', '1', '1', 0, '4', 0, '6', '9', 0, '5', 0, 0, 0, '5', 0, 0, '1', 0, '6', '3', 0, 0, '6', '5', 0, 0, 0, '7', '4', 0, '1', '7', '6', 0, 0, 0, '8', 0, '5', 0, 0, '7', '1', 0, '3', '9', 0]
>>>

答案 4 :(得分:0)

最简单的我能想到的是

[int(x or 0) for x in s.split(',')]

[int('0'+x) for x in s.split(',')]

答案 5 :(得分:0)

我的解决方案使用maplambdasplit。最终代码如下所示:

sudoku_string = "1,2,3,,4,5,,6"
output_string = map(lambda x: '0' if x=='' else x, sudoku_string.split(","))

如果您想将输出作为列表(即[1,2,3,0,4,5,0,6]),请使用

output_list = map(lambda x: 0 if x=='' else int(x), sudoku_string.split(",")

命令maplambda非常有用。 map接受一个函数和一个列表(实际上是一个可迭代的,但这是另一个故事),并将该函数应用于该列表的每个元素。所以

def plus_one(x):
    return x+1
map(plus_one, [1,2,3,4])

返回[2,3,4,5]lambda是一种快速定义函数的方法,因此我们可以将plus_one写为

lambda x: x+1

最后,split接受一个字符串并通过你传递的参数“拆分”字符串来创建一个列表。因此"1 2 3 4".split(" ")会产生[1,2,3,4]