Как заменить пустую строку на ноль в строке через запятую? - PullRequest
6 голосов
/ 09 апреля 2010

"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 ]

11 голосов
/ 09 апреля 2010

Вы можете использовать

[(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), если x - True, 0, если x - False. Обратите внимание, что пустой строкой является False.

5 голосов
/ 09 апреля 2010

Регулярные выражения часто не нужны в Python. Заданная строка s, попробуйте:

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

Я предполагаю, что вы хотите заполнить пробелы 0. Если вам нужен список целых чисел вместо строки, попробуйте это:

[(x and int(x)) or 0 for x in s.split(',')]
4 голосов
/ 09 апреля 2010
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

0 голосов
/ 11 апреля 2010

Мое решение использует map, lambda и split. Окончательный код выглядит так:

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(",")

Команды map и lambda очень полезны. 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].

0 голосов
/ 10 апреля 2010

Самое простое, о чем я могу думать, это

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

или

[int('0'+x) for x in s.split(',')]
0 голосов
/ 09 апреля 2010
>>> 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]
>>>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...