3 回答

TA貢獻1827條經驗 獲得超9個贊
index = 2
ss = ['foo','bar','far','car','sar']
ss[index] = ' '.join(ss[index:index+2])
ss.pop(index+1)
print(ss)
我希望這可行,因為它不需要創建新列表

TA貢獻1828條經驗 獲得超13個贊
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 循環、 byfor i in s或來實現for i in range(len(s))。在代碼中,由于 s.pop() 導致 len(s) 發生變化,因此i = i - 1是必要的,但for i in range(len(s))不允許更改 i 的值,因為它固定為從 0 變為 len(s)。對于為什么不使用 for 循環有任何疑問,請考慮以下代碼:-
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,但它會引發錯誤。因此,while循環解決了這個問題。

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