【问题标题】:string splitting after every other comma in string in python在python中字符串中每隔一个逗号之后的字符串拆分
【发布时间】:2012-02-20 18:45:39
【问题描述】:

我有一个字符串,其中包含用逗号分隔的每个单词。我想用python中的所有其他逗号分割字符串。我该怎么做?

例如,"xyz,abc,jkl,pqr" 应该将"xyzabc" 作为一个字符串,将"jklpqr" 作为另一个字符串

【问题讨论】:

  • 你的问题不清楚。如果你用每个逗号分割,结果将是 xyz abc jul pqr 作为四个不同的字符串。
  • ok例子请按例子回答

标签: python string split


【解决方案1】:

在每个逗号上拆分,然后重新加入对可能更容易

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

这是你想要的吗?

【讨论】:

  • 一个温和的警告:这可能会带来意想不到的后果,即如果原始元素的数量不是偶数,则最后一个条目会默默地丢失。也许没关系,尽管我更愿意在我想要的时候强迫自己表达清楚。
  • 是的 - 我不确定在这里处理它的最干净的方法是什么。也许只是将它包装在一个函数中并明确检查。
  • @Useless:你可以使用izip_longest(见我的回答)。
  • 显然我无法在办公室测试它,但如果我有机会在家验证izip_longest 版本,我会编辑它。感谢指点!
【解决方案2】:

拆分并重新加入。

所以,拆分:

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)

【讨论】:

  • @pillmuncher 好吧,zip(z,z) 不能是一个单行,这演示了 zip-with-list-multiply 习惯用法。不过,itertools.izip_longest() 的观点很好。
【解决方案3】:
str = "a,b,c,d".split(",")
print ["".join(str[i:i+2]) for i in range(0, len(str), 2)]

【讨论】:

  • (a) 不要使用 str 作为变量 (b) 在列表推导中使用索引可能相当神秘。
【解决方案4】:

只需拆分每个逗号,然后将其组合回来:

splitList = someString.split(",")
joinedString = ','.join([splitList[i - 1] + splitList[i] for i in range(1, len(splitList), 2)]

【讨论】:

    【解决方案5】:

    像这样

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

    【讨论】:

    • 你的意思是"a,b,c,d".split(',')吗?但它会给我一个我不想要的b c d
    猜你喜欢
    • 2022-11-27
    • 2014-01-03
    • 2018-12-21
    • 2018-05-08
    • 2023-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多