簡體   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