2016-05-26 111 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

相关问题