3 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
它會(huì)導(dǎo)致無限循環(huán),因?yàn)槟瑫r(shí)在其中進(jìn)行迭代res和for i in res追加新值res.append(i + j)。
列表理解不是這種情況,因?yàn)橛覀?cè)的表達(dá)式=被評(píng)估并分配給res.
您可以使用第二個(gè)列表來避免這樣做,
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貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
理解不關(guān)心分配給理解中使用的相同名稱。
a = [0, 1, 2, 3, 4]
a = [i*2 for i in a]
print(a)
輸出[0, 2, 4, 6, 8]。
在您的示例中,您res在迭代列表時(shí)將元素添加到列表中:
for i in a:
a.append(i)
這給了你一個(gè)無限循環(huán),因?yàn)楫?dāng)你繼續(xù)下一個(gè)元素時(shí),更多的元素被添加到列表中。
您的選擇是分配給一個(gè)新的變量名稱,或者使用切片來迭代列表的臨時(shí)副本:
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[:]是從第一個(gè)元素到最后一個(gè)元素的切片,步長(zhǎng)為 1。您可以在此處或官方 python 文檔中a閱讀有關(guān)切片的更多信息。

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
這是細(xì)分:) 謝謝你們幫助我提出這個(gè)想法。
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)
添加回答
舉報(bào)