Python:为什么我的“变量+ = 1”不能按预期工作?

时间:2016-05-26 10:11:13

标签: python loops python-3.x operators

username = "neelkamath@gmail.com"
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”,...,“neelkamath @gmail.com”,“e”,“ee”,... 。,“eelkamath @ gmail.com”等)但不是从“n”到“neelkamath@gmail.com”然后从“e”到“eelkamath@gmail.com”< em>然后从“e”到“elkamath@gmail.com”;它每次都会跳过一个额外的一个字母,尽管我只将 1 添加到“next”。它从“n”到“e”(前面一个字母,因为它应该)到“l”(前面2个字母)到“m”(前面3个字母),依此类推。我放置了next += 1 在一个不正确的位置?

4 个答案:

答案 0 :(得分:3)

如果要为while循环的每次迭代删除一个字符,则无需递增next

username = "neelkamath@gmail.com"
usernamelist = []
while len(username) > 0:
    for part in accumulate(username):
        usernamelist.append(part)
    username = username[1:]
print(usernamelist)

通过递增next,您可以增加要跳过的字符数:

首次迭代:username = username[1:] username"eelkamath@gmail.com"

第二次迭代:username = username[1:] username"elkamath@gmail.com" username = username[2:] username"lkamath@gmail.com"

答案 1 :(得分:2)

您想使用for循环:

username = "neelkamath@gmail.com"
usernamelist = []
for start in range(len(username)):
    usernamelist.extend(accumulate(username[start:]))
print(usernamelist)

accumulate效率不高。对于大字符串,请使用切片:

username = "neelkamath@gmail.com"
usernamelist = [
    username[s:e]
    for s, e in combinations(range(len(username)+1), 2)
]
print(usernamelist)

答案 2 :(得分:2)

问题是您要从已修改的值修改“用户名”

为了更好地理解这一点,请考虑以下几行:

username = username[next:]

没有选择原始值的一部分( neelkamath@gmail.com ),而是从已经修剪过的(在前一个循环中)。这就是你对下一次迭代的参考。

这个例子可能会有所帮助:

from itertools import accumulate
username1 = "neelkamath@gmail.com"
username2 = "neelkamath@gmail.com"
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)

答案 3 :(得分:0)

if (subjectCount > 0) { DoSomething(); }

输出

a = "neelkamath@gmail.com" for i in range(0, len(a) + 1): print a[:i]