[英]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.