繁体   English   中英

在Python中,可以在一个表达式中的第一个,内部和最后一个元素中拆分列表吗?

[英]In Python is it possible to split a list in first, inner and last element in one expression?

想象一下字符串s="one two three four five" 我想把它分成它的第一个,最后一个和'内部'元素。 我知道我可以通过巧妙的拆包和重新加入来做到这一点:

first, *rest, last = s.split(" ")
middle = " ".join(rest)
print(first, middle, last)

是否可以在一个表达式中执行此操作? (也就是说,可能先没有拆分整个字符串,然后重新加入)

使用re模块( regex101 ):

s="one two  three   four five"

import re
first, middle, last = re.findall(r'(\S+)\s*(.*)\s+(\S+)', s)[0]

print(first)
print(middle)
print(last)

打印:

one
two  three   four
five

使用splitrsplit它是最易读,最明智和最快速的解决方案

first, rest = s.split(' ', 1)
middle, last = rest.rsplit(' ', 1)

但如果您仍然认为,您re.split一步完成,您可以使用re.splitre.split

first, middle, last = re.split(r' +(.*) +', s)

当然有可能。

import re

fmlre = re.compile('^([^ ]*) (.*) ([^ ]*)$')

first, middle, last = fmlre.match("hello my old friend").groups()

你也可以做它用indexrindex ,但它往往更有效,让re做一遍整个搜索。 制作这样的表达式时要考虑的另一件事是创建一个函数; 当每次调用使用简单的描述性名称时,函数中的行数很少。

使用findrfind

first, middle, last = [s.split(' ', 1)[0], *s.split(' ', 1)[1].rsplit(' ', 1)]

现在:

print(middle)

方法是:

two  three   four
s="one two  three   four five"
" ".join(s.split(' ')[1:-1])

print(*s.split(' ')[1:-1])

另一种使用re方法,即re.split函数:

import re
s="one two  three   four five"
first,middle,last = re.split(r'\s(.*)\s',s)
print(first) #one
print(middle) #two  three   four
print(last) #five

请注意, re.split第一个参数中的空格( \\s )在组外(用括号表示),因此将被抛弃,同时请注意.*贪婪的 (将匹配尽可能多的字符),这对正确运行至关重要。这种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM