給定一個名字串列
names = [
"bob john",
"billy james",
"bob joe",
"bob joe henry",
"bob",
"bob john martin",
"billy james phillip",
"billy james phillip mark"
]
如何回傳所有全名的串列?IE
full_names = [
"bob joe henry",
"bob john martin",
"billy James phillip mark"
]
在這種情況下使用 trie 是否合適?
uj5u.com熱心網友回復:
我想這就是你要找的。根據輸出,他們似乎要求您洗掉名稱是另一個名稱開頭的條目。如果您查看 full_names 串列,則沒有任何名稱只有名稱的第一部分已經在串列中。
這個簡短的腳本將為您提供與您要求的相同的輸出
names = [
"bob john",
"billy james",
"bob joe",
"bob joe henry",
"bob",
"bob john martin",
"billy james phillip"
]
end = len(names) - 1
while end >= 0:
name = names[end]
for i,x in enumerate(names):
if i != end and name in x:
del names[end]
break
end -= 1
print(names)
接下來的幾行做同樣的事情,但更有效。感謝@stef 的建議。
namesrt = sorted(names)
full_names = [namesrt[i] for i in range(len(namesrt) - 1) if not namesrt[i 1].startswith(namesrt[i])] [namesrt[-1]]
uj5u.com熱心網友回復:
如果您對全名的定義是三個單詞,您可以簡單地將名稱用空格分隔并檢查長度
前任 -
full_names = [n for n in names if len(n.split(" ")) == 3]
但是,如果您想真正在一個大串列中找到全名。您需要找到一個包含姓氏和名字的大串列。然后對照您的名單檢查它們。
或者,您可以使用姓名串列訓練一個 spacy 模型,并使用它來識別名字和姓氏。https://spacy.io/
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/488633.html
標籤:算法
上一篇:帶前綴的字串匹配
下一篇:在Java中從字串中洗掉一個字符
