2016-05-26 110 views
0
username = "[email protected]" 
usernamelist = [] 
next = 0 
while len(username) > 0: 
    for part in accumulate(username): 
     usernamelist.append(part) 
    next += 1 
    username = username[next:] 
print(usernamelist) 

我試圖輸出用戶名的每個部分(如「n」,「ne」,「nee」,...,「[email protected]」,「e」,「ee」, ...,「[email protected]」等),而不是從「n」到「[email protected],然後從「e」到「[email protected]然後然後從「e」到「[email protected]」;它跳過一個額外的一個每封信,儘管我只加入到「下一個」。它從「n」到「e」(前面的一個字母,因爲它應該)到「l」(前面的2個字母)到「m」(前面的3個字母)等等。我是否將next += 1 置於不正確的位置?Python:爲什麼我的「變量+ = 1」不能按預期工作?

+0

您可能要更改的電子郵件地址的東西更通用。 –

+0

@JacquesGaudin它沒關係,它不是一個真正的電子郵件(這是一個刪除的地址) –

+0

只是檢查! –

回答

3

,如果你想刪除一個字符while循環的每次迭代你並不需要增加next

username = "[email protected]" 
usernamelist = [] 
while len(username) > 0: 
    for part in accumulate(username): 
     usernamelist.append(part) 
    username = username[1:] 
print(usernamelist) 

通過增加next你增加的字符數要跳過:

在第一次迭代:後username = username[1:]username"[email protected]"

在第二次迭代:username = username[1:]後是"[email protected]"username = username[2:]username"[email protected]"

2

你想用一個for循環,而不是:

username = "[email protected]" 
usernamelist = [] 
for start in range(len(username)): 
    usernamelist.extend(accumulate(username[start:])) 
print(usernamelist) 

accumulate是不是很有效。對於大串,使用切片:

username = "[email protected]" 
usernamelist = [ 
    username[s:e] 
    for s, e in combinations(range(len(username)+1), 2) 
] 
print(usernamelist) 
2

的問題是,你是從一個已經修改的值修改«用戶名»

爲了更好地理解這一點,認爲行:

username = username[next:] 

不採摘原始值的一部分([email protected]),但是從已經修剪(前環)。這是關於下一次迭代的參考。

這個例子可能會有幫助:

from itertools import accumulate 
username1 = "[email protected]" 
username2 = "[email protected]" 
usernamelist = [] 
next = 0 
while len(username2) > 0: 
    for part in accumulate(username2): 
     usernamelist.append(part) 
    next += 1 
    username2 = username1[next:] 
    print(username1) 
    print(username2) 
print(usernamelist) 
+0

所要求的輸出。謝謝。 – jezrael

相關問題