在第一次出现时拆分
Posted
技术标签:
【中文标题】在第一次出现时拆分【英文标题】:Splitting on first occurrence 【发布时间】:2011-10-17 17:29:09 【问题描述】:在第一次出现分隔符时拆分字符串的最佳方法是什么?
例如:
"123mango abcd mango kiwi peach"
拆分第一个mango
得到:
"abcd mango kiwi peach"
【问题讨论】:
记住first, *rest = my_list
存在
【参考方案1】:
df.columnname[1].split('.', 1)
这将使用第一次出现的 '.' 拆分数据。在字符串或数据框列值中。
【讨论】:
如果有人在寻找 Pandas DataFrame 上的操作,应该是这样的:df["column_name"].str.split('.', 1)
Docs:pandas.pydata.org/pandas-docs/stable/reference/api/…【参考方案2】:
你也可以使用str.partition
:
>>> text = "123mango abcd mango kiwi peach"
>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')
>>> text.partition("mango")[-1]
' abcd mango kiwi peach'
>>> text.partition("mango")[-1].lstrip() # if whitespace strip-ing is needed
'abcd mango kiwi peach'
使用str.partition
的好处是它总是会以如下形式返回一个元组:
(<pre>, <separator>, <post>)
所以这使得解包输出变得非常灵活,因为在结果元组中总是将是 3 个元素。
【讨论】:
这对于从一行文本创建键值对非常有用,如果某些行只有一个键,因为正如你所指出的,你总是得到一个元组:key, _, value = text_line.partition(' ')
您甚至可以使用切片忽略元组中的分隔符:key, value = text_line.partition(' ')[::2]
【参考方案3】:
来自the docs:
str.split([<i>sep</i>[, <i>maxsplit</i>]])
返回字符串中的单词列表,使用 sep 作为分隔符字符串。如果给出 maxsplit,则最多完成 maxsplit 个拆分(因此,列表最多有
maxsplit+1
个元素)。
s.split('mango', 1)[1]
【讨论】:
注意:如果在达到maxsplit
计数后可以执行更多拆分,则列表中的最后一个元素将包含字符串的其余部分(包括任何sep
字符/字符串)。
【参考方案4】:
对我来说更好的方法是:
s.split('mango', 1)[-1]
...因为如果发生的情况不在字符串中,您将得到“IndexError: list index out of range"
.
因此,-1
不会受到任何伤害,因为出现次数已设置为 1。
【讨论】:
如前所述,它是应用 split() 方法的出现次数。方法将仅查找并应用第一个“芒果”字符串。【参考方案5】:>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'
【讨论】:
@Swiss:那又怎样。技术还是一样的。 @Ignacio:我只是指出来。没有理由用部分正确的答案代替完全正确的答案。 技术上假定了正确的分隔符。 “第一个”是 [1] 索引。我们都引用的当然是第零索引。 :D 语义。"value" parameter must be a scalar or dict, but you passed a "list"
我用s.split("mango", 1)[1]
返回了这个
在我的情况下,我不得不在 Pandas 上使用 s.split("mango", 1,expand=True)[1] ,因为我遇到了错误以上是关于在第一次出现时拆分的主要内容,如果未能解决你的问题,请参考以下文章