Python:为什么我的;变量+;=1“;没有按预期工作?
我试图输出用户名的每一部分(如“n”、“ne”、“nee”、…”neelkamath@gmail.com“,”e“,”ee“,…,”eelkamath@gmail.com,而不是从“n”到neelkamath@gmail.com“然后从“e”到”eelkamath@gmail.com“然后从“e”到”elkamath@gmail.com"; 它每次跳过一个额外的字母,尽管我在“下一个”中只加了1。它从“n”到“e”(应该是前面一个字母)再到“l”(前面两个字母)再到“m”(前面三个字母),依此类推。我是否正在放置Python:为什么我的;变量+;=1“;没有按预期工作?,python,loops,python-3.x,operators,Python,Loops,Python 3.x,Operators,我试图输出用户名的每一部分(如“n”、“ne”、“nee”、…”neelkamath@gmail.com“,”e“,”ee“,…,”eelkamath@gmail.com,而不是从“n”到neelkamath@gmail.com“然后从“e”到”eelkamath@gmail.com“然后从“e”到”elkamath@gmail.com"; 它每次跳过一个额外的字母,尽管我在“下一个”中只加了1。它从“n”到“e”(应该是前面一个字母)再到“l”(前面两个字母)再到“m”(前面三个字母),依此类
next+=1
位置不正确?如果要为while循环的每次迭代删除一个字符,则无需增加
next
:
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)
通过增加next
可以增加要跳过的字符数:
在第一次迭代中:在username=username[1:][/code>之后username
是“eelkamath@gmail.com“
在第二次迭代中:在username=username[1:][/code>之后username
是“elkamath@gmail.com“
但在用户名=用户名[2:]
用户名之后是”lkamath@gmail.com“
您想改用for循环:
username = "neelkamath@gmail.com"
usernamelist = []
while len(username) > 0:
for part in accumulate(username):
usernamelist.append(part)
username = username[1:]
print(usernamelist)
但是,累积
不是很有效。对于大字符串,请使用切片:
username = "neelkamath@gmail.com"
usernamelist = []
for start in range(len(username)):
usernamelist.extend(accumulate(username[start:]))
print(usernamelist)
a=”neelkamath@gmail.com"
对于范围(0,len(a)+1)内的i:
打印a[:i]
输出
n
氖
原姓的
尼尔
尼尔克
尼尔卡
尼尔卡姆
尼尔卡马
尼尔卡马特
尼尔卡马斯
尼尔卡马斯@
neelkamath@g
neelkamath@gm
neelkamath@gma
neelkamath@gmai
neelkamath@gmail
neelkamath@gmail.
neelkamath@gmail.c
neelkamath@gmail.co
neelkamath@gmail.com
问题在于您正在从已修改的值修改«用户名»
为了更好地理解这一点,请考虑以下几行:
username = "neelkamath@gmail.com"
usernamelist = [
username[s:e]
for s, e in combinations(range(len(username)+1), 2)
]
print(usernamelist)
未拾取原始值的一部分(neelkamath@gmail.com),但来自已修剪的(在上一个循环中)。这都是关于下一次迭代的参考
这个例子可能有助于:
username = username[next:]
这不是OPS所需的输出。您可能希望更改电子邮件地址以获得更通用的内容@JacquesGaudin没关系,这不是一封真正的电子邮件(它是一个已删除的地址)
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)