3 回答
TA贡献1862条经验 获得超6个赞
它会导致无限循环,因为您同时在其中进行迭代res和for i in res追加新值res.append(i + j)。
列表理解不是这种情况,因为右侧的表达式=被评估并分配给res.
您可以使用第二个列表来避免这样做,
def letterCasePermutation(S):
res = ['']
for ch in S:
if ch.isalpha():
_res = []
for i in res:
for j in [ch.upper(), ch.lower()]:
_res.append(i + j)
res = res + _res
return res
result = letterCasePermutation("ab")
print(result)
编辑:
def letterCasePermutation(S):
res = ['']
for ch in S:
if ch.isalpha():
_res = []
for i in res:
for j in [ch.upper(), ch.lower()]:
_res.append(i + j)
res = _res
return res
result = letterCasePermutation("ab")
print(result)
TA贡献1864条经验 获得超2个赞
理解不关心分配给理解中使用的相同名称。
a = [0, 1, 2, 3, 4]
a = [i*2 for i in a]
print(a)
输出[0, 2, 4, 6, 8]。
在您的示例中,您res在迭代列表时将元素添加到列表中:
for i in a:
a.append(i)
这给了你一个无限循环,因为当你继续下一个元素时,更多的元素被添加到列表中。
您的选择是分配给一个新的变量名称,或者使用切片来迭代列表的临时副本:
a = [0, 1, 2, 3, 4]
b = []
for i in a:
b.append(i)
print(b)
输出[0, 1, 2, 3, 4]
a = [0, 1, 2, 3, 4]
for i in a[:]:
a.append(i)
print(a)
输出是[0, 1, 2, 3, 4, 0, 1, 2, 3, 4]。
a[:]是从第一个元素到最后一个元素的切片,步长为 1。您可以在此处或官方 python 文档中a阅读有关切片的更多信息。
TA贡献1802条经验 获得超6个赞
这是细分:) 谢谢你们帮助我提出这个想法。
def letterCasePermutation(S):
res = ['']
for ch in S:
_res = []
for i in res:
for j in [ch.upper(), ch.lower()]:
_res.append(i + j)
res = _res
return res
result = letterCasePermutation("ab")
print(result)
添加回答
举报