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