gpt4 book ai didi

python - 在字符串比较中整合通配符

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:18 25 4
gpt4 key购买 nike

我有一个 python 脚本,它接受一个名称,重新格式化它,然后将它与其他名称列表进行比较,看看它匹配了多少次。问题是它所比较的​​名字有中间名首字母(我不想在脚本中输入)。

 list_of_names = ['Doe JM', 'Cruz CR', 'Smith JR', 'Doe JM', 'Maltese FL', 'Doe J']

现在我有一个简单的函数可以重新格式化名称。

f_name = name_format('John','Doe')
print(f_name)

> 'Doe J'

现在我想要进行比较,每次出现“Doe J”或“Doe JM”时,该值都是 true。以下功能将无法按预期工作。

def matches(name, list):
count = 0
for i in list:
if i == name:
count = count + 1
else:
pass
return(count)

print (matches(f_name, list_of_names))

> 1

我的目标是使返回等于 3。为此,我想忽略中间的首字母,在本例中为“Doe JM”中的“M”。

我想做的是将名称格式化为“Doe J?”在哪里 '?'是一张通配符。我尝试导入 fnmatch 和 re 来使用他们的一些工具,但没有成功。

最佳答案

使用两个foryield。函数将返回重复的值,您需要使用 set 来删除它:

list_of_names = ['Doe JM', 'Cruz CR', 'Smith JR', 'Doe JM', 'Maltese FL', 'Doe J']

# List of names
def check_names(part_names, full_name_list):
for full_name in full_name_list:
for part_name in part_names:
if part_name in full_name:
yield full_name

result = set(check_names(['Doe J', 'Cruz'], list_of_names))

# One name
def check_names(name, full_name_list):
for full_name in full_name_list:
if name in full_name:
yield full_name

result = check_names('Doe J', list_of_names)

print list(result) # List of result
print len(result) # Count of names

关于python - 在字符串比较中整合通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com