簡體   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