разделение строк после каждой запятой в строке в python - PullRequest
1 голос
/ 20 февраля 2012

У меня есть строка, которая содержит каждое слово, разделенное запятой. Я хочу разделить строку каждой запятой в Python. Как мне это сделать?

например, "xyz,abc,jkl,pqr" должен дать "xyzabc" как одну строку и "jklpqr" как другую строку

Ответы [ 5 ]

6 голосов
/ 20 февраля 2012

Вероятно, проще разделить каждую запятую, а затем воссоединиться с парами

>>> original = 'a,1,b,2,c,3'
>>> s = original.split(',')
>>> s
['a', '1', 'b', '2', 'c', '3']
>>> alternate = map(''.join, zip(s[::2], s[1::2]))
>>> alternate
['a1', 'b2', 'c3']

Это то, что вы хотели?

2 голосов
/ 20 февраля 2012

Разделить и вернуться.

Итак, разделить:

In [173]: "a,b,c,d".split(',')
Out[173]: ['a', 'b', 'c', 'd']

И присоединиться:

In [193]: z = iter("a,b,c,d".split(','))
In [194]: [a+b for a,b in zip(*([z]*2))]
Out[194]: ['ab', 'cd']

Это работает, потому что ([z]*2) это списокиз двух элементов, оба из которых являются одним и тем же итератором z.Таким образом, zip берет первый, а затем второй элемент из z для создания каждого кортежа.

Это также работает как одиночный, потому что в [foo]*n foo оценивается только один раз, независимо от того,переменная или более сложное выражение:

In [195]: [a+b for a,b in zip(*[iter("a,b,c,d".split(','))]*2)]
Out[195]: ['ab', 'cd']

Я также вырезал пару скобок, потому что унарный * имеет более низкий приоритет, чем двоичный *.

Благодаря@pillmuncher за указание, что это можно расширить с помощью izip_longest для обработки списков с нечетным числом элементов:

In [214]: from itertools import izip_longest

In [215]: [a+b for a,b in izip_longest(*[iter("a,b,c,d,e".split(','))]*2, fillvalue='')]
Out[215]: ['ab', 'cd', 'e']

(см .: http://docs.python.org/library/itertools.html#itertools.izip_longest)

0 голосов
/ 20 февраля 2012

Просто разделите каждую запятую, а затем сложите обратно:

splitList = someString.split(",")
joinedString = ','.join([splitList[i - 1] + splitList[i] for i in range(1, len(splitList), 2)]
0 голосов
/ 20 февраля 2012
str = "a,b,c,d".split(",")
print ["".join(str[i:i+2]) for i in range(0, len(str), 2)]
0 голосов
/ 20 февраля 2012

Как это

"a,b,c,d".split(',')
...