3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊
index = 2
ss = ['foo','bar','far','car','sar']
ss[index] = ' '.join(ss[index:index+2])
ss.pop(index+1)
print(ss)
我希望這可行,因?yàn)樗恍枰獎(jiǎng)?chuàng)建新列表

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
i = 0
while i < len(s):
print(s[i])
if s[i] == 'baz' and i != 0:
s[i - 1] += ' '
s[i - 1] += ''.join(s[i])
s.pop(i)
i = i - 1
i = i + 1
上面的代碼遍歷列表,在找到 'baz' 的地方,它將 'baz' 連接到前面的元素。這無法使用 for 循環(huán)、 byfor i in s或來實(shí)現(xiàn)for i in range(len(s))。在代碼中,由于 s.pop() 導(dǎo)致 len(s) 發(fā)生變化,因此i = i - 1是必要的,但for i in range(len(s))不允許更改 i 的值,因?yàn)樗潭閺?0 變?yōu)?len(s)。對(duì)于為什么不使用 for 循環(huán)有任何疑問,請(qǐng)考慮以下代碼:-
for i in range(len(s)):
print(s[i])
if s[i] == 'baz':
s.pop(i)
i = i - 1
這輸出
foo
bar
baz
quux
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-223-8034ffc6ca03> in <module>()
1 for i in range(len(s)):
----> 2 print(s[i])
3 if s[i] == 'baz':
4 s.pop(i)
5 i = i - 1
IndexError: list index out of range
可以看出,它并沒有遍歷所有元素。由于 s.pop(),len(s) 減少到 4,s[3] 變成了 'quux',而不是 'qux'。盡管 i 存在i - 1,但它會(huì)引發(fā)錯(cuò)誤。因此,while循環(huán)解決了這個(gè)問題。

TA貢獻(xiàn)1963條經(jīng)驗(yàn) 獲得超6個(gè)贊
你可以試試這個(gè):
>>> l = ['foo', 'bar', 'baz', 'qux', 'quux']
>>> index = 2
>>> l[index - 1] = f'{l[index-1]} {l.pop(index)}'
>>> l
['foo', 'bar baz', 'qux', 'quux']
定時(shí):
382 ns ± 0.455 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
添加回答
舉報(bào)