[英]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.