繁体   English   中英

循环查找列表中递减的整个单词字符串

[英]Loop to find decrementing whole word string in a list

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

我需要确定什么是名字,什么不是,然后将其拆分为不同的变量。 因此,我有一个大文件名的大文件,其想法是检查完整的firstMiddle字符串以查看它是否在列表中,如果不是,则递减一个字符firstMiddle试。 (如果增加,则会失败,例如"maxinea" "max" "maxinea"

我尝试用一​​百种不同的方式编写这种代码,但我的问题似乎是我无法在整个单词中将它转换为x(此\\ b regex内容仅适用于实际字符串,而不适用于字符串变量?)。 我将"johnadam"递减为"johna"的最佳结果,因为列表中有一个名字"johnathan" 现在,我什至不记得我是怎么做到的,即使nameToMatch nameList == False nameToMatch ,我当前的代码也只递减一次然后退出。

我真是个菜鸟。 我知道我做的事情显然很愚蠢。 请帮忙。 这是一些代码:

firstMiddle = "johnadam"
nameToCheck = firstMiddle

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

firstName = nameToCheck
middleName = firstMiddle.partition(nameToCheck)[2]
firstMiddle = "johnadam"
nameToCheck = firstMiddle
nameList = ['johnathan', 'john', 'kate', 'sam']

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

与Gabriel所做的相比,这是一个简单的变化。 概念基本相同。 这只是看最长的比赛,而不是第一个比赛。 将整个代码放在注释部分很困难,因此需要单独回答。

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

看看是否可行...

您可以用蛮力方式做到这一点。

遍历mixedname并对其进行切片。

所以你得到

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

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

如果其中之一匹配,则将它们放在一旁并继续操作直到所有匹配。

如果您的名字以“ john”和“ johnathan”开头,或者在其他名字的中间,例如“ natham”和“ johnathan”,则在找到匹配项时不要停下来,而是继续进行切片,这样您就可以[' john ','athan']和['joh',' nathan ']

mixnames = ['johnadam','johnathan','johnamax']
names = ['john','adam', 'johnathan','nathan','max']

foundnames = []
for name in mixnames:
    for i in xrange(len(name)):
        name1 = name[0:i+1]
        name2 = name[i:]
        if name1 in names and name1 not in foundnames:
            foundnames.append(name1)
        if name2 in names and name2 not in foundnames:
            foundnames.append(name2)

print foundnames

输出:

['john', 'adam', 'johnathan', 'nathan', 'max']

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM