在lis中查找递减的整词字符串的循环

2024-10-03 15:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串变量,它是一个人的名字和中间名,它们被意外地连在一起。我们称之为firstMiddle="johnadam"

我需要确定什么是名字,什么不是名字,然后把它们分成不同的变量。所以我有一个充满名字的大文本文件,我的想法是检查完整的firstMiddle字符串,看看它是否在列表中,如果不在列表中,则减量一个字符,然后重试。(如果递增失败,例如"max"来自"maxinea"

我试过用上百种不同的方法来写这篇文章,但我的问题似乎是我不能用一个完整的单词将它转换成x(这个正则表达式只适用于实际的字符串,而不适用于字符串变量?)。我把"johnadam"减少到"johna",因为列表中有一个名字"johnathan"。现在我甚至不记得我是怎么做到的,我当前的代码只减少一次,然后退出,即使nameToMatchnameList == False。在

我是个十足的傻瓜。我知道我在做一件很明显很愚蠢的事。请帮忙。下面是一些代码:

firstMiddle = "johnadam"
nameToCheck = firstMiddle

for match in nameList:
    if nameToCheck not in nameList:
        nameToCheck = nameToCheck[:-1]
        break

firstName = nameToCheck
middleName = firstMiddle.partition(nameToCheck)[2]

Tags: 方法字符串代码in列表名字字符max
3条回答

你可以用暴力的方式。在

对mixedname进行迭代,并每多一点就对其进行切片。在

所以你得到了

['johnadam']
['johnada','m']
['johnad','am']
['johna','dam']

['john','adam'] # your names in the list

如果其中一个匹配,你就把它们放在一边继续做,直到它们全部匹配为止。在

如果您的名字开头相同,如“john”和“johnathan”,或者位于其他名称的中间,如“natham”和“johnathan”,则在找到匹配项时不应停止,而是继续进行切片,这样就得到了['john”、'athan']和['joh','nathan']

^{pr2}$

输出:

['john', 'adam', 'johnathan', 'nathan', 'max']
firstMiddle = "johnadam"
nameToCheck = firstMiddle
nameList = ['johnathan', 'john', 'kate', 'sam']

while nameToCheck not in nameList:
    nameToCheck = nameToCheck[:-1]
firstname = nameToCheck
middleName = firstMiddle[ len(firstName): ]

这是加布里埃尔所做的改变。概念基本相同。这一个只看最长的比赛,而不是第一场比赛。把整个答案单独放在它的代码段很难。在

firstMiddle = "johnadam"
nameToCheck = firstMiddle
nameList = ['johnathan', 'john', 'kate', 'sam']

firstNames = filter(lambda m: firstMiddle.startswith(m), nameList)
middleName = ''
if firstNames: # if the list isnt empty
    firstName = sorted( firstNames, key=len )[-1]
    middleName = firstMiddle.partition(firstName)[2]
else: 
    firstName = firstMiddle


print firstName

看看这是否有效。。。在

相关问题 更多 >