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
在一个不正确的位置?
答案 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]