[英]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
使用split
和rsplit
它是最易读,最明智和最快速的解决方案
first, rest = s.split(' ', 1)
middle, last = rest.rsplit(' ', 1)
但如果您仍然认为,您re.split
一步完成,您可以使用re.split
来re.split
first, middle, last = re.split(r' +(.*) +', s)
当然有可能。
import re
fmlre = re.compile('^([^ ]*) (.*) ([^ ]*)$')
first, middle, last = fmlre.match("hello my old friend").groups()
你也可以做它用index
和rindex
,但它往往更有效,让re
做一遍整个搜索。 制作这样的表达式时要考虑的另一件事是创建一个函数; 当每次调用使用简单的描述性名称时,函数中的行数很少。
使用find
和rfind
:
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.