假設我有一個連接的名字 姓氏組合串列,如下所示:
["samsmith","sallyfrank","jamesandrews"]
我也有串列possible_firstnames和possible_lastnames.
如果我想根據出現在possible_firstnames和 中的值拆分這些全名字串possible_lastnames,最好的方法是什么?
我最初的策略是將全名字串和每個possible_firstnames/possible_lastnames值之間的字符一一比較,我將在發現匹配時拆分全名字串。但是,我意識到我會遇到問題,例如,如果包含“Sal”作為可能的名字(我的代碼會嘗試將“sallyfrank”變成“Sal Lyfrank”等)。
我的下一步是possible_lastnames在完成拆分之前交叉檢查“sal”之后字串中剩余的內容 ,但是這開始接近復雜的問題,所以我想知道是否有一個更簡單的選項我一直在從一開始就俯瞰?
我正在使用的語言是 Python。
uj5u.com熱心網友回復:
如果您得到相似的名字,如 sam、samantha 和 saman,請將它們按相反順序排列,以便最短的在最后
full_names = ["samsmith","sallyfrank","jamesandrews", "samanthasang", "samantorres"]
first_name = ["sally","james", "samantha", "saman", "sam"]
matches = []
for name in full_names:
for first in first_name:
if name.startswith(first):
matches.append(f'{first} {name[len(first):]}')
break
print(*matches, sep='\n')
結果
sam smith
sally frank
james andrews
samantha sang
saman torres
這不會選擇像Sam Antony這樣的名字。它會將其顯示為 *Saman Tony”,在這種情況下,您的姓氏想法會起作用。
它也不會挑選Sam Anthanei。如果所有三個姓氏都在您的姓氏串列中,則這可能是 Samantha Nei、Saman Thanei 或 Sam Anthanei。
uj5u.com熱心網友回復:
這是你想要的嗎
names = ["samsmith","sallyfrank","jamesandrews"]
pos_fname = ["sally","james"]
pos_lname = ["smith","frank"]
matches = []
for i in names:
for n in pos_fname:
if i.startswith(n):
break
else:
continue
for n in pos_lname:
if i.endswith(n):
matches.append(f"{i[:-len(n)].upper()} {n.upper()}")
break
else:
continue
print(matches)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321994.html
